选择排序

来源:互联网 发布:淘宝卖家号怎么关闭 编辑:程序博客网 时间:2024/05/22 06:58

基本思想:

假设有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]最小,所以记录它的下标jfor(j=0;j<n-1;j++) //共找了n-1遍{//让a[j]即a[m]与它后面的数a[i]逐个比较,选出最小那个,把它的下标i赋给mif(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;}