1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 要点:设立哨兵,作为临时存储和判断数 ...
分类:
编程语言 时间:
2017-07-01 09:47:40
阅读次数:
173
本文Python实现了插入排序、基数排序、希尔排序、冒泡排序、高速排序、直接选择排序、堆排序、归并排序的后面四种。 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过一趟排序将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再 ...
分类:
编程语言 时间:
2017-06-29 09:56:09
阅读次数:
211
选择排序的基本思想 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,知道所有记录排序完毕。主要有两种选择排序方法:直接选择排序(或称简单选择排序)和堆排序。 直接选择排序 基本思想 第i趟排序開始时,当前有序区和无序区分别为R[1 …… i-1]和R[i …… n](1 ...
分类:
编程语言 时间:
2017-06-28 13:16:01
阅读次数:
207
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。 直接插入排序:O(n* ...
分类:
编程语言 时间:
2017-06-28 11:56:24
阅读次数:
198
一、堆(Heap)定义 (1)n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): (1)n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): k(i)<=k(2i)且k(i)<=k(2i+1)(1≤i≤ n/2 ...
分类:
编程语言 时间:
2017-06-25 21:46:36
阅读次数:
162
一、 选择排序的思想 选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。 简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换; ...
分类:
编程语言 时间:
2017-06-25 14:18:29
阅读次数:
197
对于堆排序会涉及一些完全二叉树知识。对于待排序列{10, 2, 11, 8, 7},把它看成是一颗完全二叉树,如下图所示。 堆分为大根堆和小根堆:大根堆表示每个根节点均大于其子节点(L(i) >= L(2i) && L(i) >= L(2i + 1)),小根堆表示每个根节点均小于其子节点(L(i) ...
分类:
编程语言 时间:
2017-06-21 21:55:05
阅读次数:
245
C++ Primer 学习中。。。 简单记录下我的学习过程 (代码为主) /***************************************** STL-算法--Heap算法 堆排序算法 (heapsort) make_heap() //把容器内的数据做堆排序 push_heap() ...
分类:
编程语言 时间:
2017-06-20 12:28:16
阅读次数:
166
“堆”是一个大家很熟悉的数据结构,它可以在\(O(log\;n)\)的时间内维护集合的极值。 这都是老套路了,具体的内部实现我也就不谈了。 我一般来说,都是用queue库中的priority_queue,也就是STL的优先队列来实现堆的,然而最近我发现了一个新的STL容器,它相对优先队列有着更小的常 ...
分类:
编程语言 时间:
2017-06-20 00:21:18
阅读次数:
124
1. 冒泡算法2. 快速排序3. 归并排序4. 选择排序5. 堆排序 排序算法 重要性不言而喻,很多算法问题往往选择一个好的排序算法往往问题可以迎刃而解 1、冒泡算法 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他 ...
分类:
编程语言 时间:
2017-06-18 20:49:40
阅读次数:
255