sophia_hxw

人生有三恨,一恨鲫鱼有刺,二恨海棠无香,三恨红楼未完!----------张爱玲
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

十大排序算法之(三)——选择排序

Posted on 2016-07-09 13:24  sophia_hxw  阅读(151)  评论(0编辑  收藏  举报

#1,选择排序简介

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面),我个人认为,按照数值来讲,这两个5没差别,所以这是不是决定这个算法不稳定还有待商榷。

 

#2,c++实现算法

 1 #include<iostream>
 2 #include<vector>
 3 
 4 using namespace std;
 5 
 6 void SelectSort(vector<int> &A);
 7 void Select(vector<int> &A, int start, int stop);
 8 void swapv(int &a, int &b);
 9 
10 int main(){
11   vector<int> array = { 13, 19, 9, 5, 12, 8, 7, 4, 21, 2, 6, 11 };
12 
13   SelectSort(array);
14 
15   system("Pause");
16   return 0;
17 }
18 
19 void SelectSort(vector<int> &A){
20   int len=A.size();
21 
22   for (int i = 0; i < len; i++)
23   Select(A,i,len-1);
24 
25 }
26 
27 void Select(vector<int> &A, int start, int stop){
28   int val=A[start];
29   int len=A.size();
30   int pos=0;
31 
32   for (int i = start; i < stop + 1; i++)
33     if(A[i]<val){
34       pos=i;
35       val=A[i];
36     }
37 
38 
39   if(pos!=0)
40   swapv(A[start],A[pos]);
41 }
42 
43 void swapv(int &a, int &b){
44   a=a+b;
45   b=a-b;
46   a=a-b;
47 }
选择排序

 

#3,程序实现结果