基本原理
先找到数组中最大的那个数,将最大的数放到数组最右端(交换a[maxid]和a[len-1]这两个数的位置),然后继续从a[0]到a[len-2]中找到最大的数,然后交换a[maxid]和a[len-2]位置,依次查找交换,直到比较完a[0]和a[1]的大小结束,然后输出排序后的数组
代码一(定义max函数)
c
#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;
}
代码二
c
#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;
}
运行结果