选择排序介绍
选择排序(Selection sort)是一种简单直观的排序算法。
它的基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
总结:两个for循环=一个for喜欢i=0-(n-1)+一个for循环寻找比i小的数组的坐标用min存起来+一个交换的过程
/* * 设置一个参考存储坐标,和冒泡的区别是不需要频繁的移动交换,它只需要找坐标存起来就可以啦 */ #include"stdio.h" /* * 选择排序 * * 参数说明: * a -- 待排序的数组 * n -- 数组的长度 */ void select_sort(int a[], int n) { int i; // 有序区的末尾位置 int j; // 无序区的起始位置 int min; // 无序区中最小元素位置 for(i=0;i<n;i++) { int flag=1; min=i; //设置一个参考存储坐标,和冒泡的区别是不需要频繁的移动 for(j=i+1;j<n;j++) //不就开始冒泡了,但是也不用冒泡,那怎么找最小呢? { if(a[j]<a[min]) min=j;//就这样一层循环找到无序区最小的a[j]存到min中 flag=0; } if(!flag) //若上面出现比i更小的就交换,没有就不用交换 { int temp=a[min]; //交换a[i]和a[min] a[min]=a[i]; // a[i]=temp; } } } void main(void) { int a[]={5,9,14,2,7,84,36,3,16,12,10}; int length=sizeof(a)/(sizeof(a[0])); printf("排序前:"); for(int i=0;i<length;i++) printf("%d ",a[i]); printf(" "); select_sort(a,length); printf("选择排序后:"); for(int i=0;i<length;i++) printf("%d ",a[i]); printf(" "); }