返回顶部

选择排序

简单选择排序


  • 简单选择排序是交换排序类型的一种,其排序思想为:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
  • 简单选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。

算法步骤

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  3. 重复第二步,直到所有元素均排序完毕。

动图演示

简单选择排序

数据处理流程

简单选择排序

算法分析



时间复杂度
  • 简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数总是N (N - 1)/2
  • 而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0.
  • 当序列反序时,移动次数最多,为3N(N-1)/2。
  • 所以,综合以上,简单排序的时间复杂度为 O(N2)

空间复杂度
  • 简单选择排序需要占用 1 个临时空间,在交换数值时使用。

参考代码

//选择排序函数
void selection_sort(int arr[], int len){
    int i,j;
    for (i = 0 ; i < len - 1 ; i++){
        int min = i;
        for (j = i + 1; j < len; j++)     //查找未排序的元素
            if (arr[j] < arr[min])    //寻找最小值
                min = j;
        int temp = arr[min];
        arr[min]= arr[i];
        arr[i] = temp;
    }
}
posted @ 2020-11-25 00:02  Shamero  阅读(103)  评论(0)    收藏  举报