选择排序:
(1)先把一个数组里面的最大值找到;
(2)把这个最大的元素和最后一个位置互换。
#include <stdio.h>
int main()
{
int n,i,max,i_max,tmp;
int a[10];
for(i = 0;i < 10;i++)
{
//从键盘获取数组的每个元素
scanf("%d",&a[i]);
}
for(n = 0;n < 9;n++)
{
max = a[0];//假设最大值为数组第一个元素
i_max = 0;//数组第一个元素的下标为0
for(i = 0;i < 10 - n;i++)
{
//主要出现一个数的值比最大值max还大,那么这个数就是最大值
//把这个数赋给max,此时max又变为最大值
if(a[i] > max)
{
max = a[i];
i_max = i;//同时,保存最大值的下标
}
}
//把最大值交换到末尾位置
//第一次循环得到的max为数组的最大值,如果它不在数组末尾,就于末尾位置的数进行互换位置
//第二次循环得到的max为数组的第二大值,如果它不在倒数第二位置,就与其进行互换位置,以此类推
if(i_max != (9 - n))
{
tmp = a[9 - n];
a[9 - n] = a[i_max];
a[i_max] = tmp;
}
}
//打印已经排好序的数组
for(i = 0;i < 10;i++)
{
printf("%d ",a[i]);
}
putchar('\n');//换行符
return 0;
}
相关文档:
冒泡排序:https://blog.csdn.net/weixin_45800785/article/details/109477873
快速排序(递归):https://blog.csdn.net/weixin_45800785/article/details/109484458