排序算法 - 直接选择排序

Posted 智网俱乐部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法 - 直接选择排序相关的知识,希望对你有一定的参考价值。

【基本思想】

  每一次从待排序的序列中选出最小(或最大)的一个元素,存放在已排好序的序列的后一个位置,直到全部待排序的数据元素排完;

  例如,给定包含N个正整数元素的序列vector<int> seq
  第1趟:从seq[0]~seq[n-1]中选出最小的数据,将它与seq[0]交换;
  第2趟,从seq[1]~seq[n-1]中选出最小的数据,将它与seq[1]交换;
  第3趟,从seq[2]~seq[n-1]中选出最小的数据,将它与seq[2]交换;
    .... .... .... .... .... ....

  第n-1趟,从seq[n-2]~seq[n-1]中选出最小的数据,将它与seq[n-2]交换。

 

【算法复杂度】

时间复杂度(平均) 时间复杂度 (最坏) 时间复杂度(最好) 空间复杂度 稳定性
O(n^2) O(n^2) O(n^2) O(1) 不稳定

 

时间复杂度>>>

选择排序的交换操作介于 0 和 (n - 1) 次之间,最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次;

选择排序比较操作的次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。


算法稳定性>>>

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。

比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。


【算法实现】



以上是关于排序算法 - 直接选择排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法系列1--简单排序(选择,冒泡,直接插入)

七大排序算法(插排,希尔,选择排序,堆排,冒泡,快排,归并)--图文详解

排序算法

快速排序/快速选择算法

算法2 排序算法:直接选择排序和堆排序

常见排序算法基本原理及实现(快排,归并,堆排,直接插入.....)