排序-选择排序

选择排序的过程如下:

  1. 假设第1个元素为最小元素。
  2. 从第2个元素开始,依次遍历数组每个元素并和第一个元素比较,如果比第一个元素小,则置换位置,这一轮遍历下来,会找出最小元素并放在第1个位置上。
  3. 重复第一步,假设第2个元素为次小的元素,并执行第二步,从第3个元素开始遍历。

用代码写出来结果就是:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 void change(int *p,int pos1,int pos2);
 6 void selectSort(int *p,int length);
 7 void print(int *p,int length);
 8 
 9 int main()
10 {
11     int p[] = {2,5,3,11,89,76,24,33,15};
12     selectSort(p,sizeof(p)/sizeof(int));
13     print(p,sizeof(p)/sizeof(int));
14     cout << "Hello world!" << endl;
15     return 0;
16 }
17 
18 void print(int *p,int length)
19 {
20     for(int i=0;i<length;i++)
21         cout << p[i] << endl;
22 }
23 
24 void selectSort(int *p,int length)
25 {
26     for(int i=0;i<length;i++)
27     {
28         int min = i;
29         for(int j=i+1;j<length;j++)
30         {
31             if(p[j]<p[min])
32             {
33                 min=j;
34             }
35             change(p,min,i);
36         }
37     }
38 }
39 
40 void change(int *p,int pos1,int pos2)
41 {
42     if(pos1 == pos2)
43     {
44         return;
45     }
46     int temp=p[pos1];
47     p[pos1] = p[pos2];
48     p[pos2] = temp;
49 } 

 

性能分析:

  1. 每个位置的元素都会进行一次交换,所以一共需要N次交换。
  2. 每个位置的元素都需要N-1-i次比较,所以一共需要 1+2+3+.....+ (N-2)+(N-1) 次比较。约等于 N*N/2次。

posted on 2017-08-18 13:06  ^~~^  阅读(132)  评论(0编辑  收藏  举报

导航