#include <stdio.h>
int main(void)
{
int i, j;
int a[] = {5, 2, 9, 4, 7, 6, 1, 3, 8, 0}; //待排序数组
int max, temp;
for (i = 0; i < 10; i++) {
max = i; //记录最大值的下标
for (j = i + 1; j < 10; j++) {
if (a[j] > a[max]) { //将 < 改为 >
max = j; //更新最大值下标
}
}
if (max != i) { //如果最大值下标不是当前位置,交换两个数
temp = a[i];
a[i] = a[max];
a[max] = temp;
}
}
for (i = 0; i < 10; i++) {
printf("%d ", a[i]); //按照从大到小的顺序输出排序后的数组
}
return 0;
}
我可以修改此代码以使其按照大到小的顺序排序,示例代码如下:
int max(int a, int b) { if(a > b) return a; else if(a < b) return b; }
// 定义用于从大到小比较的函数 less_than int less_than(int a, int b) { if(a > b) return 0; else return 1; }
// 定义用于排序的函数 order_by void order_by(int arr, int length, int (compare)(int, int)) { int i, j; for(i=0;i<length-1;i++) { for(j=i+1;j<length;j++) { if((*compare)(arr[i], arr[j]) == 0) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } }
int main() { int arr[] = {5, 2, 3, 1, 4}; int length = sizeof(arr) / sizeof(int);
order_by(arr, length, less_than);
int i;
for(i=0;i<length;i++)
{
printf("%d ", arr[i]);
}
return 0;
}
在原有的代码基础上,我添加了两个函数:一个用于从大到小比较的函数 less_than,一个用于排序的函数 order_by。在 order_by 函数中,我依然使用了函数指针的方式来实现比较的逻辑,但是此时传入 less_than 函数,因此实现了大到小排序的功能。