简单选择排序算法思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
以长度为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
个元素的数组排成有序序列。
测试输入:
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
趟的结果。
#include <stdio.h>
#define N 100
int main ()
{
int a[N],n,i,min,t,m;
scanf ("%d",&n);
for (i=0;i<n;i++)
scanf ("%d",&a[i]);
for (m=0;m<n-1;m++)
{
min=m;
for (i=m+1;i<n;i++)
{
if (a[min]>a[i])
{
min=i;
}
}
t=a[min];
a[min]=a[m];
a[m]=t;
for (i=0;i<n;i++)
printf ("%d ",a[i]);
printf ("\n");
}
return 0;
}
运行结果:
运行成功!