vlambda博客
学习文章列表

一种算法,两种实现-选择排序

选择排序

一种算法,两种实现-选择排序


排序是比较常用的算法,其实有很多种实现,比如冒泡排序,选择排序,归并排序,希尔排序,快速排序等,今天介绍使用Scratch与python语言实现选择排序算法。

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。


一种算法,两种实现-选择排序

动图演示


一种算法,两种实现-选择排序

一种算法,两种实现-选择排序


一种算法,两种实现-选择排序


两种实现算法中,共同属性都包涵:

控制排序轮数的变量i;

控制每轮循环中比较次数的变量j;

记录每轮循环中最小数值的位置的变量minindex;


一种算法,两种实现-选择排序

Scratch实现

一种算法,两种实现-选择排序

首先看下我们的界面,为了方便理解,将所有变量均显示于舞台上:

一种算法,两种实现-选择排序


一种算法,两种实现-选择排序


为了不破坏原列表数据,排序前首先使用重复控件对原列表进行了备份处理,备份后的数据用于后面的排序。在接下来的排序算法中也会使用相同的方法哦!

一种算法,两种实现-选择排序


Scratch使用时,对于学过python、C++等其他编程语言的同学来说可能会有一些疑惑,因为生成的列表下标值从1起始。


一种算法,两种实现-选择排序


最后看下整个排序过程吧:



一种算法,两种实现-选择排序


一种算法,两种实现-选择排序

Python实现


相同的原理,Python实现起来倒是显得简约、直观:




1

总结

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。