当前位置: 代码迷 >> 综合 >> Simple Selection Sort(简单选择排序)
  详细解决方案

Simple Selection Sort(简单选择排序)

热度:69   发布时间:2023-11-21 04:49:24.0

算法思想

       一个拥有若干元素的序列,重复遍历序列,将其中最大(或最小)的元素找出来,按顺序放到指定位置,再将次大(或次小)元素找出来放到指定位置,直到所有元素排完。

实现步骤

       以从小到大为例:
1.遍历序列,找出最小元素
2.将找出的最小元素与第一个元素互换位置
3.从第二个元素开始遍历,重复步骤1和2

 

源码

C/C++

void SimpleSelectionSort (std::vector<int> &vec)
{int tmp, min_index, i, j;for (i = 0; i < n; ++i) {min_index = i;for (j = i+1; j < vec.size(); ++j) {if (vec[j] < vec[min_index]) {min = j;}}std::swap(vec[min_index], vec[i]);}
}


Python

 

def swap(sequence, i, j):temp = sequence[i]sequence[i] = sequence[j]sequence[j] = tempdef SelectionSort(sequence):i = 0while i < len(sequence) - 1:minIndex = ij = i + 1while j < len(sequence):if sequence[j] < sequence[minIndex]:minIndex = jj += 1if minIndex != i:swap(sequence, minIndex, i)i += 1

时间复杂度

 

       最好情况下,待排序序列已经有序排列,那么只需进行n(n-1)/2次比较操作,时间复杂度为O(n?);最坏情况下,待排序序列反序,则需要进行n(n-1/2次比较、3(n-1)次交换,所以时间复杂度为O(n?)。故简单选择排序的平均时间复杂度为O(n?)。
       与冒泡排序相比,虽然两者的时间复杂度都为O(n?),但简单选择排序的元素交换次数明显比冒泡排序要少,因此同等条件下简单选择排序要比冒泡排序速度更快(n值越大越明显)。

 

稳定性

       简单选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素。那么,如果一个元素比当前元素小,而这个小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。如[5, 8, 5, 2, 9],在第一趟排序后两个5的相对顺序就变了。

  相关解决方案