一、环境
之前写过,但是因为作业再写一遍。
- 系统:win10
- 语言:python3.7
二、各种排序算法
2.1 冒泡排序
原理如下图:

代码实现:
1 | def maopao(arr): |
输出:
1 | [0, 2, 3, 4, 5, 6, 8, 9] |
2.2 选择排序
原理如下图:

效果比冒泡优秀一点点,冒泡每次都需要交换,而选择排序只需要交换一次。
代码实现:
1 | def SelectSort(arr): |
输出:
1 | [0, 2, 3, 4, 5, 6, 8, 9] |
2.3 直接插入排序
原理如下图:

代码实现:
1 | def InsertSort(arr): |
结果:
1 | [0, 2, 3, 4, 5, 6, 8, 9] |
2.4 折半插入排序
原理说明:
主要是在直接插入的基础上,增加了一个二分查找算法,更快的找到插入数据的位置。
代码如下:
1 | def HalfSort(arrData, target, mi, ma): |
输出:
1 | [0, 2, 3, 3, 3, 4, 5, 6, 8, 9] |
2.5 希尔排序
原理说明:
考虑到归并排序在数据原本就比较有序的情况下效率比较高,借用这种想法,每隔数个间隔进行一次比较,逐步缩短比较的间隔,直到排序完毕
代码如下:
1 | def ShellSort(arr): |
输出:
1 | [0, 2, 3, 3, 3, 4, 5, 6, 8, 9] |
2.6 链表排序
原理说明:
在直接插入的基础上,通过链表插入,只需要更换两个节点的指针,不需要进行数据移位。
代码如下:
1 | # 节点定义 |
输出:
1 | 0 2 3 3 3 4 5 6 8 9 |
2.7 快速排序
原理如下图:

代码如下:
1 | def getIndex(arr, left, right, tmp): |
输出:
1 | [0, 2, 3, 3, 3, 4, 5, 6, 8, 9] |
2.8 计数排序
原理说明:
统计每一个数大于其他数的次数,然后进行排序。优点:不需要进行交换和移位,在数据值范围较小的情况,性能比较优秀。
代码如下:
1 | def CountSort(arr): |
输出:
1 | [0, 2, 3, 3, 3, 4, 5, 6, 8, 9] |
2.9 树选择排序
原理说明:
通过类似于树的结果,通过两两比较,类似打擂台的形式,比较出最大值(下面程序中是最小),保存输出。
代码如下:
1 | import numpy as np |
2.10 二路归并排序
原理如下图:

代码如下:
1 | def merge(arr, left, middle, right, tmpArray): |
结果:
1 | [0, 2, 3, 4, 5, 6, 8, 9] |
2.11 堆排序
原理说明:

程序如下:
1 | import numpy as np |
输出结果:
1 | [1, 2, 3, 3, 3, 4, 4, 5, 5, 6, 7, 9, 9] |