用C语言实现将数字从小到大排序,但是把0放到最后
时间: 2024-11-24 07:42:49 浏览: 13
对数字型数组进行从小到大排序
5星 · 资源好评率100%
在C语言中,你可以使用经典的冒泡排序算法,并稍作修改以满足条件,即在比较元素大小的同时,如果遇到0,则将其交换到最后。以下是基本的代码实现:
```c
#include <stdio.h>
// 比较函数,用于处理0的特殊规则
int compare(const void *a, const void *b) {
int num1 = *(const int *)a;
int num2 = *(const int *)b;
if (num1 == 0 && num2 != 0) // 如果第一个数是0,第二个不是
return -1;
else if (num1 != 0 && num2 == 0) // 如果第二个数是0,第一个不是
return 1;
else // 如果两个都是非0数,正常比较
return num1 - num2;
}
void sort_ending_zero(int arr[], int size) {
qsort(arr, size, sizeof(int), compare); // 使用qsort函数并传入自定义比较函数
}
int main() {
int arr[] = {5, 2, 9, 0, 7, 1};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Before sorting:\n");
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
sort_ending_zero(arr, size);
printf("\nAfter sorting with 0 at the end:\n");
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
return 0;
}
```
在这个例子中,`compare()` 函数负责比较和判断是否需要交换。`qsort()` 函数则会根据这个比较函数对数组进行排序。
阅读全文