排序算法
yurenguowang
这个作者很懒,什么都没留下…
展开
-
[排序] 希尔排序(Python)
思想希尔排序(Shell)是直接插入排序的优化版本,实现了时间复杂度突破O(n2)O(n^2),策略在于不断分组并在组内进行直接插入排序。那么如何分组呢?这里提出一个概念——增量序列,希尔增量{n/2,n/4,...,1}(n为序列长度)\{n/2,n/4,...,1\}(n 为序列长度)就是一种增量序列,增量序列里的元素称为gap。我们依次把序列分为n/2n/2组,n/4n/4组,…,1组,即不断原创 2017-08-21 00:04:29 · 388 阅读 · 0 评论 -
[排序] 直接插入排序(Python)
思想遍历待排序列的每一个元素(从第二个元素开始),把当前元素插入到前面的有序序列中。是稳定的排序方法。示例对序列 [2, 4, 1, 3, 6, 5] 按升序排列 下标 排序过程 i = 1 [2, 4, 1, 3, 6, 5] i = 2 [2, 4, 1, 3, 6, 5] -> [2, 1, 4, 3, 6, 5] -> [1, 2, 4, 3, 6, 5] i =原创 2017-08-10 10:46:26 · 286 阅读 · 0 评论 -
[排序] 简单选择排序(Python)
思想每一轮循环中,找到待排序列中的最小值,将其和待排序列头元素交换,最终达到有序示例对序列 [2, 4, 1, 3, 6, 5] 按升序排列 [2, 4, 1, 3, 6, 5] -> [1, 4, 2, 3, 6, 5] -> [1, 2, 4, 3, 6, 5] -> [1, 2, 3, 4, 6, 5] -> [1, 2, 3, 4, 6, 5] -> [1, 2, 3, 4, 5, 6]原创 2017-08-09 17:51:56 · 310 阅读 · 0 评论 -
[排序] 冒泡排序(Python)
思想依次比较相邻两元素的大小,顺序与要求的不一致就交换。这样会把待排序序列中的最大(最小)元素不断”浮”到最右端,最终完成升序或降序排列。示例对序列 [2, 4, 1, 3, 6, 5] 按升序排列(只记录有交换发生的循环)。第一次循环: [2, 4, 1, 3, 6, 5] –> [2, 1, 4, 3, 6, 5] –> [2, 1, 3, 4, 6, 5] –> [2, 1, 3, 4, 5原创 2017-08-08 16:07:58 · 340 阅读 · 0 评论 -
[排序] 归并排序(Python)
思想归并排序就是利用分治思想,合——分——合,把两个有序的子数组合并为一个有序数组,合并的策略就是比较两个子数组中还未参与排序部分的头元素,把较小的元素加进来。归并排序是稳定的排序。示例对序列[7,6,4,3,1,2,8,5]按升序排列。 合——分: [7,6,4,3,1,2,8,5] -> [7,6,4,3],[1,2,8,5] -> [7,6],[4,3],[1,2],[8,5] -> [7原创 2017-08-23 20:14:45 · 310 阅读 · 0 评论 -
[排序] 快速排序(Python)
思想快速排序(快排)是非常常用的排序方法,在技术面试中出现频率也特别高。它主要采用交换和分治的策略进行排序。是不稳定排序。 步骤: 1、在序列中选一个元素作为划分的基准元素(pivot) 2、将所有不大于pivot的数字放在pivot的前面,大于pivot的数字放在pivot的后面 3、以pivot为界,对前后两个子序列分别递归重复前两步,直至区间内只有一个元素示例对序列 [2, 4, 7,原创 2017-08-11 15:09:03 · 972 阅读 · 0 评论