基本原理
先找到数组中最大的那个数,将最大的数放到数组最右端(交换a[maxid]和a[len-1]这两个数的位置),然后继续从a[0]到a[len-2]中找到最大的数,然后交换a[maxid]和a[len-2]位置,依次查找交换,直到比较完a[0]和a[1]的大小结束,然后输出排序后的数组
代码一(定义max函数)
#include<stdio.h>
int max(int a[],int len)
{int maxid = 0;for(int i=1; i<len; i++){if(a[i] > a[maxid]){maxid = i;}}return maxid;//找到最大数在数组中的下标
}int main()
{int a[] = {2,45,6,12,87,34,90,24,23,11,65};int len = sizeof(a)/sizeof(a[0]);//求数组长度 int i = len - 1;for(i; i>0; i--)//此处 "i>0;"最后循环到i=1时,数组长度为2,此时只需比较a[0]和a[1]的大小即可 {int maxid = max(a,i+1);int t = a[maxid];a[maxid] = a[i];a[i] = t;//将最大数与每次循环最右端的数交换位置
// printf("%d\n",maxid); //输出最大值得下标 }for( int i=0; i<len; i++){printf("%d ",a[i]);//输出排序后的数组 }return 0;
}
代码二
#include<stdio.h>
int main()
{int a[] = {2,45,6,12,87,34,90,24,23,11,65};int len = sizeof(a)/sizeof(a[0]);//求数组长度 int i = len - 1;for(i; i>0; i--)//此处 "i>0;"最后循环到i=1时,数组长度为2,此时只需比较a[0]和a[1]的大小即可 {int maxid = 0;for(int j=1; j<=i; j++){if(a[j] > a[maxid]){maxid = j;}}int t = a[maxid];a[maxid] = a[i];a[i] = t;//将最大数与每次循环最右端的数交换位置 }for( int i=0; i<len; i++){printf("%d ",a[i]);//输出排序后的数组 }return 0;
}
运行结果