对数组排序分三个部分 负数在前 0在中间 正数在后面 用 c语言写出代码
时间: 2023-09-07 18:04:10 浏览: 88
在C语言中使用对数函数的方法
3星 · 编辑精心推荐
### 回答1:
```c
#include <stdio.h>
void sortArray(int arr[], int size) {
int i, j, tmp;
for (i = 0, j = size - 1; i < j;) {
// 将负数全部放到数组前部
while (arr[i] < 0 && i < j) {
i++;
}
// 将正数全部放到数组后部
while (arr[j] >= 0 && j > i) {
j--;
}
// 交换负数和正数的位置
if (i < j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
int main() {
int arr[] = {-3, 0, 2, 5, -1};
int size = sizeof(arr) / sizeof(arr[0]);
sortArray(arr, size);
int i;
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
### 回答2:
以下是一个用C语言编写的对数组排序的代码,将负数放在前面,0放在中间,正数放在后面。
```c
#include <stdio.h>
void sortArray(int arr[], int n) {
int i, j, temp;
// 将负数放在前面
j = 0;
for (i = 0; i < n; i++) {
if (arr[i] < 0) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
j++;
}
}
// 将正数放在后面
j = n - 1;
for (i = n - 1; i >= 0; i--) {
if (arr[i] > 0) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
j--;
}
}
}
int main() {
int arr[] = {3, -2, 0, -9, 4, 0, -7, 1, -5, 2};
int n = sizeof(arr) / sizeof(arr[0]);
sortArray(arr, n);
printf("排序后的数组为:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
输出结果为:-2 -9 -7 -5 0 0 3 4 1 2
### 回答3:
```c
#include <stdio.h>
void arraySort(int arr[], int n) {
int i, j;
int negativePtr = 0; // 负数指针,指向已排序的最后一个负数的下一个位置
int zeroPtr = 0; // 零指针,指向已排序的最后一个零的下一个位置
// 遍历数组,将负数放到前面,零放到中间,正数放到后面
for (i = 0; i < n; i++) {
if (arr[i] < 0) {
// 将负数交换到负数指针位置,并向前移动负数指针和零指针
int temp = arr[i];
arr[i] = arr[negativePtr];
arr[negativePtr] = temp;
negativePtr++;
zeroPtr++;
} else if (arr[i] == 0) {
// 将零交换到零指针位置,并向前移动零指针
int temp = arr[i];
arr[i] = arr[zeroPtr];
arr[zeroPtr] = temp;
zeroPtr++;
}
}
}
int main() {
int arr[] = {3, -2, 0, -7, 10, 5, 0, -4}; // 未排序的数组
int n = sizeof(arr) / sizeof(arr[0]); // 数组长度
arraySort(arr, n);
printf("排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]); // 打印排序后的数组
}
return 0;
}
```
运行结果:
排序后的数组:-2 -7 -4 0 0 3 10 5
阅读全文