对10个数从大到小排序,可以采用以下方法:
一、选择排序法(顺序排序法)
-
基本原理
每次从未排序部分选择最大值,与当前未排序部分的第一个元素交换位置,重复此过程N-1次(N为数组长度)。
-
实现步骤
-
外层循环控制轮数(共9轮);
-
内层循环遍历未排序部分,找到最大值后交换。
-
二、冒泡排序法
-
基本原理
通过相邻元素比较和交换,将较大元素逐步“冒泡”到数组末尾,重复多轮实现排序。
-
优化建议
- 若在某一轮未发生交换,说明数组已排序,可提前终止。
三、快速排序法(进阶)
-
基本原理
采用分治策略,通过基准数将数组分为两部分,递归排序并合并结果。
-
实现要点
- 选择基准数后,从左右两端向中间扫描,交换不符合条件的元素。
四、C语言实现示例
以下是选择排序法的C语言代码示例:
#include <stdio.h>
void printArray(int *p, int n) {
for (int i = 0; i < n; i++) {
printf("%5d", p[i]);
}
printf("\n");
}
void selectionSort(int *a, int n) {
for (int i = 0; i < n-1; i++) {
int max_idx = i;
for (int j = i+1; j < n; j++) {
if (a[j] > a[max_idx]) {
max_idx = j;
}
}
if (max_idx != i) {
int temp = a[i];
a[i] = a[max_idx];
a[max_idx] = temp;
}
}
}
int main() {
int a;
printf("请输入10个数: ");
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
selectionSort(a, 10);
printf("从大到小排序后: ");
printArray(a, 10);
return 0;
}
五、注意事项
-
效率 :选择排序和冒泡排序的时间复杂度均为O(n²),快速排序更优但实现较复杂;
-
稳定性 :上述方法均为不稳定排序,若需稳定排序可考虑归并排序。