数组的排序方法
1、选择排序法
选择排序法指每次选择所要排序的数组中的最大值(由大到小排序,由小到大排序则选择最小值),将这个数组元素的值与最前面没有进行排序的数组元素的值互换。
下面以对数字9、6、15、4、2进行排序为例进行讲解,每次交换的顺序如下表所示。
由上表可以发现,在第1次排序过程中将第1个数字和最小的数字进行了位置互换,而第2次排序过程中,将第2个数字和剩下的数字中最小的数字进行了位置互換,依此类推,每次都将下一个数字和剩余的数字中最小的数字进行位置互換,直到将一组数字按从小到大排序为止。
下面通过实例来看一下如何通过程序使用选择法实现数组元素的从小到大排序。
实现过程如下
(1)声明一个整型数组,并通过键盘为数组元素赋值。
(2)设置一个嵌套循环,第1层循环为前5个数组元素,并在每次循环时将对应当前次数的数组元素设置为最小值(例如,当前是第3次循环,那么将数组中第3个元素,也就是下标为2的元素设置为当前的最小值),然后在第2层循环中,循环比较该元素之后的各个数组元素,并将每次比较的结果中较小的数设置为最小值,在第2层循环结束时,将最小值与开始时设置为最小值的数组元素进行互换。当所有循环都完成以后,就将数组元素按照从小到大的顺序重新排列。
(3)循环输出数组中的元素,并在输出5个元素以后进行換行,在下一行输出后面的5个元素。
实现代码:
#include<stdio.h>
int main()
{
int i,j,t,a[]; //定义变量及数组为基本整型
printf("请输入5个数:\n");
for(i=;i<;i++)
scanf("%d",&a[i]); //从键盘中输入要排序的10个数字
for(i=;i<;i++)
for (j=i+;j<;j++)
if(a[i]>a[j]) //如果前一个数比后一个数大,则利用中间变量t实现两值互换
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
printf("排序后的顺序是:\n");
for(i=;i<;i++)
printf("%5d", a[i]); //输出排序后的数组
printf("\n");
return ;
}