算法与数据结构 · 教程

选择排序

基本思想

以第一个元素为基准,与后面的元素进行对比.选择最值(最大值/最小值)与当前位置进行交换。对每个元素都为基准比较,这就是排序过程了.

实现过程

算法01-排序01-选择排序01.png

代码实现

int *select_sort(int *a, int length) {
    for (int i = 0; i < length; i++) {
        int min_value_index = i;
        for (int j = i + 1; j < length; j++) {
            // select the min value index and record it
            if (a[min_value_index] > a[j]) {
                min_value_index = j;
            }
        }
        if (min_value_index != i) {
            int temp = a[min_value_index];
            a[min_value_index] = a[i];
            a[i] = temp;
        }
       // print(a, length);
    }
    return a;
}

排序算法的评估

  • 基于比较,交换的排序算法.
  • 空间复杂度为O(1)O(1),是一种原地排序算法.
  • 最好情况,最坏情况,平均情况,的时间复杂度都是 O(n2)O(n^2).
  • 是不是稳定的排序算法? 主要取决于: if (a[min_value_index] > a[j]) {min_value_index = j;} 如果是 a[min_value_index] >= a[j] 就是不稳定的排序算法.

最后

期望与你一起遇见更好的自己

期望与你一起遇见更好的自己

配套资料 · 免费领取
本文属于「ALGO」资料包范围:算法系列合订 + 刷题清单。LeetCode 与杭电 OJ 的题解索引。
在公众号「方家小白」回复关键词 ALGO 即可领取。全文无需关注即可阅读。
ALGO