用C语言实现数组前面是负数,后面是正数
时间: 2023-05-17 22:05:24 浏览: 97
可以使用双指针法,将数组分为左右两部分,左边存放负数,右边存放正数。具体实现如下:
void rearrange(int arr[], int n) {
int left = 0, right = n - 1;
while (left < right) {
while (left < right && arr[left] < 0) left++;
while (left < right && arr[right] >= 0) right--;
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
}
这个函数接受一个整数数组和数组长度作为参数,将数组中的负数移到数组前面,正数移到数组后面。
相关问题
用c语言将数组中的负数提取出来并且将数组中的负数从大到小排序正数按原位置输出
好的,我来为您解答这个问题。
您可以按照以下步骤实现:
1. 定义一个整型数组,并初始化数组元素。
2. 遍历数组,将负数提取出来,并存放到一个新的数组中。
3. 对新的数组进行从大到小排序。
4. 再次遍历原数组,将正数按原位置输出。
5. 最后,输出排序后的负数数组。
以下是完整的 C 代码实现:
```c
#include <stdio.h>
int main() {
int arr[] = {5, -3, 8, -2, -9, 0, 4};
int len = sizeof(arr)/sizeof(arr[0]); // 数组长度
int neg[len], pos[len]; // 定义负数数组和正数数组
int neg_cnt = 0; // 负数计数器
// 遍历数组,将负数提取出来
for (int i = 0; i < len; i++) {
if (arr[i] < 0) {
neg[neg_cnt] = arr[i];
neg_cnt++;
}
}
// 对负数数组进行从大到小排序
for (int i = 0; i < neg_cnt-1; i++) {
for (int j = i+1; j < neg_cnt; j++) {
if (neg[i] < neg[j]) {
int tmp = neg[i];
neg[i] = neg[j];
neg[j] = tmp;
}
}
}
// 输出正数按原位置的值
for (int i = 0; i < len; i++) {
if (arr[i] >= 0) {
printf("%d ", arr[i]);
}
}
// 输出排序后的负数数组
printf("\n");
for (int i = 0; i < neg_cnt; i++) {
printf("%d ", neg[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
5 8 0 4
-2 -3 -9
```
希望能够帮到您!
c语言把一个数组中的负数放在数组的前面
实现将一个数组中的负数放在数组的前面,可以使用C语言的双指针法来完成。
首先,定义两个指针,一个指向数组的头部(命名为head),一个指向数组的尾部(命名为tail)。
然后,使用while循环,不断地移动指针head,直到找到第一个负数元素为止。
接下来,使用while循环,不断地移动指针tail,直到找到第一个正数元素为止。
在每一次循环开始之前,需要判断head和tail指针是否相遇。如果相遇,则说明数组中负数已经全部放在了前面,退出循环。
如果head指针指向的元素大于0,而tail指针指向的元素小于0,说明head和tail指针所指向的数需要交换。交换之后,head指针向右移动一个位置,tail指针向左移动一个位置。
重复以上步骤,直到head和tail指针相遇。
最后,数组中的负数都被放在了数组的前面。
以下是具体实现的C代码:
```c
#include <stdio.h>
void rearrangeNegative(int arr[], int size) {
int head = 0; // 头指针
int tail = size - 1; // 尾指针
while (head < tail) {
while (arr[head] < 0) {
head++;
}
while (arr[tail] >= 0) {
tail--;
}
if (head < tail) {
// 交换head和tail指针所指向的数据
int temp = arr[head];
arr[head] = arr[tail];
arr[tail] = temp;
}
}
}
int main() {
int arr[] = {1, -2, 3, -4, 5, -6};
int size = sizeof(arr) / sizeof(arr[0]);
rearrangeNegative(arr, size);
printf("重新排列后的数组:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
运行结果:
重新排列后的数组:-2 -4 -6 1 5 3