图解数据结构—选择排序|Zam9036博客

算法概述

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

图解核心原理

图解数据结构—选择排序|Zam9036博客

假设我们需要对上图数列进行排序。

图解数据结构—选择排序|Zam9036博客

首先,我们需要对数列进行线性搜索(从头到尾逐个元素搜索),找出最小的元素值(最小为1)。

图解数据结构—选择排序|Zam9036博客

将值最小的元素(最小为1)与数列最左端的元素(原来数列最左端元素为6)互换。如果最小值已经在最左端,则不需要执行任何操作。

图解数据结构—选择排序|Zam9036博客

保持已经排好的元素位置不变(即1的位置不再改变),在剩余元素中找出值最小的元素(最小为2)。

图解数据结构—选择排序|Zam9036博客

将此时值最小的元素(最小为2)与未排序的数列最左端的元素(原来未排序的数列最左端元素为6)互换。同样,如果最小值已经在最左端,则不需要执行任何操作。

图解数据结构—选择排序|Zam9036博客

继续保持已经排好的元素位置不变(即1、2的位置不再改变),在剩余元素中找出值最小的元素(最小为3)。

图解数据结构—选择排序|Zam9036博客

将此时值最小的元素(最小为3)与未排序的数列最左端的元素(原来未排序的数列最左端元素为7)互换。同样,如果最小值已经在最左端,则不需要执行任何操作。

图解数据结构—选择排序|Zam9036博客

继续保持已经排好的元素位置不变(即1、2、3的位置不再改变),在剩余元素中找出值最小的元素(最小为4)。

图解数据结构—选择排序|Zam9036博客

将此时值最小的元素(最小为4)与未排序的数列最左端的元素(原来未排序的数列最左端元素为8)互换。同样,如果最小值已经在最左端,则不需要执行任何操作。

图解数据结构—选择排序|Zam9036博客

继续保持已经排好的元素位置不变(即1、2、3、4的位置不再改变),在剩余元素中找出值最小的元素(最小为5)。

图解数据结构—选择排序|Zam9036博客

将此时值最小的元素(最小为5)与未排序的数列最左端的元素(原来未排序的数列最左端元素为9)互换。同样,如果最小值已经在最左端,则不需要执行任何操作。

图解数据结构—选择排序|Zam9036博客

继续保持已经排好的元素位置不变(即1、2、3、4、5的位置不再改变),在剩余元素中找出值最小的元素(最小为6)。

图解数据结构—选择排序|Zam9036博客

将此时值最小的元素(最小为6)与未排序的数列最左端的元素(原来未排序的数列最左端元素为7)互换。同样,如果最小值已经在最左端,则不需要执行任何操作。

图解数据结构—选择排序|Zam9036博客

继续保持已经排好的元素位置不变(即1、2、3、4、5、6的位置不再改变),在剩余元素中找出值最小的元素(最小为7)。

图解数据结构—选择排序|Zam9036博客

将此时值最小的元素(最小为7)与未排序的数列最左端的元素(原来未排序的数列最左端元素为9)互换。同样,如果最小值已经在最左端,则不需要执行任何操作。

图解数据结构—选择排序|Zam9036博客

继续保持已经排好的元素位置不变(即1、2、3、4、5、6、7的位置不再改变),在剩余元素中找出值最小的元素(最小为8)。

图解数据结构—选择排序|Zam9036博客

将此时值最小的元素(最小为8)已经在最左端,则不需要执行任何操作。

图解数据结构—选择排序|Zam9036博客

继续保持已经排好的元素位置不变(即1、2、3、4、5、6、7、8的位置不再改变),在剩余元素中找出值最小的元素(最小为9)。将此时值最小的元素(最小为9)已经在最左端,则不需要执行任何操作。

现在,数列的顺序已经排好。

原创声明

文章作者:Zam9036

部分资料来自:http://algorithm.wiki

文章链接:https://zam9036.gitee.io/2020/01/11/22-Graphical-data-structure-selection-sort

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自Zam9036的博客