选择排序

选择排序算法(不稳定,时间复杂度O(n^2)),性能上要略优于冒泡

升序

基本思想:在一堆数中,先找到最小的数,放到第0位,就不用管了;在剩下的数中再找到第二小的数放到第1位,就不用管了;在剩下的数中再找到第三小的数放到第2位,依次类推,总数依次减一,最后排完为止。

方法:

  1. 从第0位开始与后面的数进行比较,如果有比第0位小的数,就让那个数取代第0位继续与后面的数进行比较,如果有比那个数小的,就让其取代位置,以保证与后面数比较的数永远是最小的。第1遍下来,就找出了最小的数,把那个数放到第0位。
  2. 从第1位开始同理进行比较,第2遍下来,就找出了第2小的数放到第1位。
  3. 依次类推
 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 }
View Code
原文地址:https://www.cnblogs.com/wwzyy/p/4386049.html