选择排序算法(不稳定,时间复杂度O(n^2)),性能上要略优于冒泡
升序
基本思想:在一堆数中,先找到最小的数,放到第0位,就不用管了;在剩下的数中再找到第二小的数放到第1位,就不用管了;在剩下的数中再找到第三小的数放到第2位,依次类推,总数依次减一,最后排完为止。
方法:
- 从第0位开始与后面的数进行比较,如果有比第0位小的数,就让那个数取代第0位继续与后面的数进行比较,如果有比那个数小的,就让其取代位置,以保证与后面数比较的数永远是最小的。第1遍下来,就找出了最小的数,把那个数放到第0位。
- 从第1位开始同理进行比较,第2遍下来,就找出了第2小的数放到第1位。
- 依次类推
1 #include <iostream> 2 3 using namespace std; 4 5 #define max 10 6 7 void sort(int *array) 8 9 { 10 11 for(int i=0;i<max;i++)//从0开始,到9结束,共10次循环 12 13 { 14 15 int imin = i; 16 17 for (int j = i+1;j<max;j++)//每次小循环后都找到最小的数 18 19 { 20 21 if(array[j] < array[imin])//如果后面的数比imin小 22 23 { 24 25 imin = j;//就让后面的数取代imin的位置,继续和后面的数比较 26 27 } 28 29 } 30 31 //经过一次小循环后,就找到了最小的数 32 33 if (i != imin)//如果最小数的下标不是它该在的位置,就把它放在该在的位置 34 35 { 36 37 swap(array[i],array[imin]); 38 39 } 40 41 } 42 43 } 44 45 void main() 46 47 { 48 49 int array[max]={5,2,1,7,8,9,4,1,3,10}; 50 51 sort(array); 52 53 for(int i=0;i<10;i++) 54 55 cout<<array[i]<<" "; 56 57 }