经典排序之 选择排序

现在简单来讲一下选择排序的思想:

我们接触选择排序的时间很长了,也是我们编程时需要最先接触的程序。他的思想确实较简单。

算法思想:

  选择排序需要针对数组从头到尾进行扫描,其实就是记录下扫描一遍后整个数组的最小元素和最小元素的位置,然后和第一个元素进行交换,这样经过一遍排序我们就可以确定一个元素的最终位置;然后从第二个数据开始再次循环扫描交换,直到最后;在这里交换时有一个优化的过程,如果最小元素的位置和之前记录的位置一样,则可以通过比较,避免无谓的交换,节省时间和空间

选择排序是一个不稳定的排序,最好最坏和平均下来的时间复杂度都是O(n2);

 

算法实现:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void swap(int &a, int &b){
 5     int temp = a;
 6     a = b;
 7     b = temp;
 8 } 
 9 
10 void selectSort(int *data, int length){
11     
12     if(data == NULL || length < 0){
13         return;
14     }
15     
16     for(int i = 0; i < length - 1; i++){
17         int value = data[i];
18         int index = i;                              
19         
20         for(int j = i + 1; j < length; j++){
21             if(data[j] < value){
22                 value = data[j];                        //记录每一次的最小值
23                 index = j;                              //记录每一次的索最小值索引
24             }
25         }
26         
27         if(index == i){                                 //简单优化
28             continue;
29         }
30         
31         swap(data[i], data[index]);                      //交换阶段
32     }
33 }
34 
35 int main(){                                              //测试代码
36     int str[] = {34, 23, 4, 78, 1, 0, 45, 9, 33, 6, 234};
37     int len = sizeof(str) / sizeof(int);
38     selectSort(str, len);
39     
40     for(int k = 0; k < len; k++){
41         cout<< str[k]<< ' '; 
42     } 
43     
44     return 0;
45 }

 

posted @ 2016-03-24 21:01  Dormant  阅读(317)  评论(0编辑  收藏  举报