C语言,选择排序算法,出大到小怎么排

img


#include <stdio.h>int main(void){ int i,j; int a]={5,2,9,4,7,6,1,3,8,0}; //待排序数组 int min,temp; for(i=0;i<10;i++){ min=i; //记录最小值的下标 for(j=i+1;j<10;j++){ if(a[j]<a[min]){ min=j; //更新最小值下标 } } if(min!=i){ //如果最小值下标不是当前位置,交换两个数 temp=a[i]; a[i]=a[min]; a[min]=temp; } } for(i=0;i<10;i++){ printf(%d ,a[i]); //输出排序后的数组 } return 0;}

img


#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;
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/354458
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以修改此代码以使其按照大到小的顺序排序,示例代码如下:

    include

    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 函数,因此实现了大到小排序的功能。