数据结构与算法系列(三)—选择排序

牧码心

共 1837字,需浏览 4分钟

 ·

2021-03-01 00:30


点击蓝字关注我们



af06315165f69d5445fac1c94f31223f.webp数据结构与算法系列(三)—选择排序

前言

大家好,牧码心今天给大家推荐一篇数据结构与算法系列(三)—选择排序的文章,希望对你有所帮助。大纲如下:

  • 选择排序基本介绍

  • 选择排序图文说明

  • 选择排序时空复杂度和稳定性

  • 选择排序具体实现

选择排序基本介绍

选择排序 是一种较简单的排序算法,排序过程类似于队伍排队,每次选出相对最高或最小的同学排列。相比于冒泡排序省去了每轮交换多次的开销。其基本思想是:首先在未排序的数列中找到最小(最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序图文说明

  • 下面以数列{20,40,30,10,60,50}为例,演示选择排序过程

    0a77674abd36ed13a09b09c66760ed7f.webp选择排序过程


    排序流程说明:

    • 第1趟:i=0.找出a[1…5]中的最小值a[3]=10,然后将a[0]和a[3]互换。数列变化:

      • 20,40,30,10,60,50->10,40,30,20,60,50

    • 第2趟:i=1.找出a[2…5]中的最小值a[3]=20,然后将a[1]和a[3]互换。数列变化:

      • 10,40,30,20,60,50->10,20,30,40,60,50

    • 第3趟:i=2.找出a[3…5]中的最小值,由于该最小值大于a[2],该趟不做任何处理。

    • 第4趟:i=3.找出a[4…5]中的最小值,由于该最小值大于a[3],该趟不做任何处理。

    • 第5趟:i=4.交换a[4]和a[5]的数据,数列变化:

      • 10,20,30,40,60,50->10,20,30,40,50,60

选择排序时空复杂度和稳定性

时间复杂度空间复杂度稳定性
O(n^2)O(1)不稳定
  • 说明

    • 时间复杂度:选择排序每一轮需要选出最小值min,在交互到最左边的时间复杂度为O(n),共需要进行n-1轮。所以总的时间复杂度为O(n^2) ;

    • 空间复杂度 :选择排序是原地排序,没有产生额外的空间,则为O(1) ;

    • 稳定性 :选择排序是不稳定的,比如被排序的序列存在多个相同的的元素时,该排序会打乱各元素原有的相对顺序。

选择排序实现

  • 选择排序(java版)

 1/*
2     * @Author:greekw
3     * @Desc: 选择排序,类比站队
4     * @Date 0:04 2020/7/22
5     * @Param [array]
6     * @return void
7    **/

8    public static void selectSort(int[] array){
9        for (int i = 0; i < array.length ; i++) {
10            // 设置初始的最小位置
11            int minIndex = i;
12
13            // 找出最小元素的位置
14            for (int j = i; j < array.length; j++) {
15
16                minIndex = (array[j] < array[minIndex]) ? j : minIndex;
17            }
18
19            // 交换元素,排序
20            int temp = array[i];
21            array[i] = array[minIndex];
22            array[minIndex] = temp;
23        }
24    }
25     // 测试用例
26    public static void main(String[] args) {
27        int[] selectArray= new int[]{20,40,30,10,60,50};
28        selectSort(selectArray);
29        System.out.println(Arrays.toString(selectArray));
30    }




往期回顾


THE

END

长按二维码关注,一起学习、思考、成长





扫码关注我们

微信号 : lx_three



浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报