首页 > 编程语言 > 详细

简单选择排序

时间:2020-07-01 16:07:06      阅读:43      评论:0      收藏:0      [点我收藏+]

1.过程介绍(以顺序为例)

1.我们设置两个记录i和j,i自数组第一个元素开始,j自i+1个元素开始。

2.接着j遍历整个数组,选出整个数组最小的值,并让这个最小的值和i的位置交换(如果i选择的元素是最小的则不需要交换),我们称这个过程为一趟选择排序。

3.i选中下一个元素(i++),重复进行每一趟选择排序。

4.持续上述步骤,使得i到达n-1处,即完成排序 。

 

2.图示过程:

以数据{2,10,9,4,8,1,6,5}为例

开始数据

2

10

9

4

8

1

6

5

第一趟

1

10

9

4

8

2

6

5

第二趟

1

2

9

4

8

10

6

5

第三趟

1

2

4

9

8

10

6

5

第四趟

1

2

4

5

8

10

6

9

第五趟

1

2

4

5

6

10

8

9

第六趟

1

2

4

5

6

8

10

9

第七趟

1

2

4

5

6

8

9

10

如图所使,每次交换的数据使用红颜色标记出,已经排好序的数据使用蓝底标注,

每一趟从待排序的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,我们只需要进行n-1趟排序即可,因为最后剩下的一个数据一定是整体数据中最大的数据。

3.代码实现:

 1 #include<iostream>
 2 using namespace std;
 3 void select_sort(int a[],int n){
 4     int temp;
 5     for(int i=0;i<n-1;i++){
 6         temp=i;      //利用一个中间变量temp来记录需要交换元素的位置
 7         for(int j=i+1;j<n;j++){
 8             if(a[temp]>a[j]){   //选出待排数据中的最小值
 9                 temp=j;  
10             }
11         }
12         swap(a[i],a[temp]); //交换函数
13     }
14 } 
15 int main(){
16     int a[8]={2,10,9,4,8,1,6,5};
17     int n=8;
18     select_sort(a,n);
19     for(int i=0;i<n;i++){
20         cout<<a[i]<< ;
21     }
22     return 0;
23 }

输出:

1 1 2 4 5 6 8 9 10 

 相比冒泡排序的不断交换,简单选择排序(simple selection sort)是等到合适的关键字出现后再进行交换,并且移动(交换)一次就可以达到一次冒泡的效果。

简单选择排序

原文:https://www.cnblogs.com/qunxuan/p/13219284.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!