📜  选择排序 c++ (1)

📅  最后修改于: 2023-12-03 15:28:21.823000             🧑  作者: Mango

选择排序

选择排序(Selection Sort)是一种简单直观的排序算法,其基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。

算法描述
  1. 初始状态:无序区为R[1..n],有序区为空;
  2. 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R[i]交换,这样R[1..i]就和R[i+1..n)两部分中最小关键字的位置交换了。
  3. i++ ,重复第二步直到i==n-1。排序完成。
代码实现
void selection_sort(int arr[], int len) {
    int minIndex, temp;
    for (int i = 0; i < len - 1; i++) {
        minIndex = i;
        for (int j = i + 1; j < len; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex != i) {
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}
复杂度分析
  • 时间复杂度:O(n^2),其中n为待排序的元素个数。
  • 空间复杂度:O(1)。
稳定性

选择排序是不稳定的。例如,序列{ 4,5,4,6,3},第一次选择第1个元素4与第5个元素3交换,那么第一个4就和第二个4的相对前后顺序发生了改变。

总结

选择排序在实现上比较容易,时间复杂度为O(n^2),不适合数据规模较大的情况,但是空间复杂度为O(1),是一种原地排序算法。此外,选择排序是不稳定的,但是由于其算法简单,对于小规模数据排序还是可以使用的。