简单选择排序算法思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
以长度为n=10
的序列(46 74 53 14 26 38 86 65 27 34)
的选择排序过程做示范:
第1
趟:在10
个数中选出最小值后,将最小值和第1
个数组元素交换,则数组元素为(14 74 53 46 26 38 86 65 27 34)
;
第2
趟:在剩下的9
个数中选出最小值后,将最小值和第2
个数组元素交换,则数组元素为(14 26 53 46 74 38 86 65 27 34)
;
第3
趟:在剩下的8
个数中选出最小值后,将最小值和第3
个数组元素交换,则数组元素为(14 26 27 46 74 38 86 65 53 34)
;
……
第9
趟:在剩下的2
个数中选出最小值后,将最小值和第9
个数组元素交换,则数组元素为(14 26 27 34 38 46 53 65 74 86)
;
共执行9
趟操作,可将有n=10
个元素的数组排成有序序列。
#include <stdio.h>
#define N 100
int main ()
{
int a[N],i,j,n,m,t;
scanf("%d",&n);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{
t=i;
for(j=i+1;j<n;j++)
if(a[j]<a[t])
t=j;
if(i!=t)
{
m=a[i];
a[i]=a[t];
a[t]=m;
}
for(j=0;j<n;j++)
printf("%d ",a[j]);
printf("\n");
}
return 0;
}
输入: 10
88 84 23 85 32 34 80 52 91 77
输出: 23 84 88 85 32 34 80 52 91 77
23 32 88 85 84 34 80 52 91 77
23 32 34 85 84 88 80 52 91 77
23 32 34 52 84 88 80 85 91 77
23 32 34 52 77 88 80 85 91 84
23 32 34 52 77 80 88 85 91 84
23 32 34 52 77 80 84 85 91 88
23 32 34 52 77 80 84 85 91 88
23 32 34 52 77 80 84 85 88 91
提示: 如果有10
个整数,要求输出每趟选择排序共9
趟的结果。