Sort Algorithm
休漠
凡有成者,必务于实。凡有所学,皆成性格。
展开
-
Quick Sort的两种实现方法---Python
1.思想: 取一个参考值,让序列所有的元素排序后,左侧子序列的值都比参考值小,右侧子序列的值都比参考值大。 分别对左侧和右侧的子序列做1中的递归操作。 基于上述思想,常用的实现方法有两种,一种是简单、容易理解的Lomuto scheme,另一种是效率更高的Hoare scheme。下面的代码参考自维基百科的伪代码实现,不清楚的可以移步维基,仔细研究。2.Lomuto par...原创 2019-01-28 20:40:32 · 967 阅读 · 0 评论 -
Merge Sort的Python实现
Merge Sort 是使用分治法的典型例子,将array分为两个子数组,子数组排序之后,再进行合并。显然,如果对于每个子数组进行复制,而不是就地排序,那么空间占用将达到O(nlg(n)),这是非常大的内存开销,所以这里通过索引的变化来定义子数组。这个问题的关键是索引的变化千万不能出错,推荐这种情况下统一使用左闭右开的数组表示法。优点如下: [left,right)直接分为[left,m...原创 2019-01-28 21:11:39 · 1947 阅读 · 0 评论 -
Heap Sort 的原理及Python实现
1.Heap表示方法满足以下性质的二叉树Binary Tree可以成为Binary Heap:Complete Tree:所有的层都是完全的,除了最后一层,且最后一层的叶子靠左。Min Heap or Max Heap:根节点是最大值或者最小值,而且这个性质对于任何递归得到的子树都成立。Binary Heap通常使用array表示:根节点在array[0];array[(i-1)...原创 2019-01-29 20:46:04 · 1691 阅读 · 0 评论 -
Insert Sort的Python实现
插入排序的时间复杂度为O(n2)O(n^2)O(n2),in-place 排序方法,空间复杂度为常数,属于稳定排序,在数组长度较小时,排序效果很好。具体的python实现如下:def InsertSort(array): for i in range(1,len(array)): key = array[i] while i>0 and key<array[i-1]: ...原创 2019-03-08 15:14:46 · 223 阅读 · 0 评论 -
Shell Sort介绍及其Python实现
— 以下内容来自维基百科的介绍,本博客只作为一个摘要笔记。希尔排序,又称递减增量排序算法,是插入排序的高校改进版本,输入非稳定排序算法。希尔排序是针对插入排序的两点性质提出改进方法的:插入排序对于已经排序好的数据操作效率很高,几乎达到线性排序的效率;但是每次只能将数据移动一位,因此来说是低效的。希尔排序的时间复杂度和步长的选择有关,最坏情况下的时间复杂度为 o(nlog2n)o(n\...原创 2019-03-08 15:52:47 · 373 阅读 · 0 评论