设有长度为n的一维整型数组,设计一个算法,将该数组中所有的负数存放在数组的前部,而所有的正数存放在负数的后面。
时间: 2023-04-26 10:03:57 浏览: 104
可以使用双指针法,一个指针从数组的左端开始,一个指针从数组的右端开始,分别向中间移动。当左指针指向的数为负数,右指针指向的数为正数时,交换两个数的位置。直到左指针和右指针相遇为止,这样就可以将负数和正数分别放在数组的前部和后部。
相关问题
设有长度为n的一维整型数组A,设计一个算法,将该数组中所有的负数存放在 数组的前部,而所有的正数存放在负数的后面。
可以使用双指针法,一个指针从数组的左端开始,另一个指针从数组的右端开始,分别向中间移动,当左指针指向的元素为负数,右指针指向的元素为正数时,交换两个元素的位置,直到两个指针相遇为止。具体实现代码如下:
void partition(int A[], int n) {
int left = 0, right = n - 1;
while (left < right) {
while (left < right && A[left] < 0) left++;
while (left < right && A[right] >= 0) right--;
if (left < right) {
int temp = A[left];
A[left] = A[right];
A[right] = temp;
}
}
}
c语言:用指针实现在具有N个元素的一维整型数组中查找数据x。
以下是用指针实现在一维整型数组中查找数据x的C代码:
```c
#include <stdio.h>
// 函数声明
int* find(int* arr, int n, int x);
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 5;
int* result = find(arr, n, x);
if (result != NULL) {
printf("找到了数据%d,它在数组中的下标为%d\n", x, result - arr);
} else {
printf("没有找到数据%d\n", x);
}
return 0;
}
// 函数定义
int* find(int* arr, int n, int x) {
int* p = arr;
for (int i = 0; i < n; i++) {
if (*p == x) {
return p;
}
p++;
}
return NULL;
}
```
在主函数中,首先定义了一个一维整型数组`arr`,并计算它的长度`n`,以及要查找的数据`x`。然后调用`find()`函数,在其中通过一个指针`p`遍历整个数组,找到第一个值等于`x`的元素,并将它的指针返回。
在主函数中,判断`find()`函数返回的指针是否为`NULL`,如果不是,就说明找到了数据`x`,并输出它在数组中的下标;否则,就说明没有找到数据`x`。