基本思想:
假设有4个元素,其序列4、2、5、1. 我们以第一个元素(即4)开始,看它后面有没有比它还小的(在比它小的数中选最小那个),然后选择1,让4和1交换,如此,序列变成了1、2、5、4了(当然如果后面没有比4小的数,就不用交换,即原序列不变)。我们再以第二个元素开始(即2),再扫描后面的元素(与第一步做法类似)……,序列变成
1、2、5、4,(就是没变,因为2后面没有比它更小的)。再以第三个数(即5)开始……,序列变成1、2、4、5.再以第四个数(即5)开始,后面没数了,结束!
共找了3(即4-1)遍。
//实现代码:
#include<stdio.h>
#define MAXSIZE 100 //定义数组最大容量
int a[MAXSIZE];
int main()
{
int i,j,temp,n;
printf("请输入元素的个数:");
scanf("%d",&n);
printf("请输入这%d个元素:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int m; //记录当前比较时,最小那个数的下标
for(j=0;j<n;j++)
{
m=j; //就先假设a[j]最小,所以记录它的下标j
for(j=0;j<n-1;j++) //共找了n-1遍
{//让a[j]即a[m]与它后面的数a[i]逐个比较,选出最小那个,把它的下标i赋给m
if(a[i]<a[m])
m=i;
}
if(m!=j)//就是说,如果刚才找的最小下标m不是j的话,就让a[j]与a[m]交换
{
temp=a[j];
a[j]=a[m];
a[m]=temp;
}
}
printf("排序后的序列为:");
for(i=0;i<n;i++) //输出排序后的序列
printf("%d ",a[i]);
printf("\n");
return 0;
}