由于很多大神已经总结过各种排序算法的性能及适合坏境,这里便不再总结,只是强调几个重点。
(1)快排的空间复杂度不是o(1),是o(logn)~o(n);
(2)四种不稳定的排序算法:简单选择,快排,希尔和堆排序
(3)冒泡排序最有情况下时间复杂度可优化为o(n);
(4)归并排序的空间复杂度为o(n);
(5)快排在整体倒序的情况下时间复杂度为o(n2)
(6)建一个最大堆的复杂度为o...
分类:
编程语言 时间:
2015-08-26 12:01:32
阅读次数:
184
阅览、认为、编写代码!/********************************************* * copyright@hustyangju * blog: http://blog.csdn.net/hustyangju * 题目:堆排序实现,另外实现接口:取堆最大值并删除、堆插...
分类:
编程语言 时间:
2015-08-25 21:33:32
阅读次数:
164
堆排序的堆不是指内存区域里面的堆,而是一种数据结构。堆可以分为“大顶堆”和“小顶堆”,堆其实是一种特殊的二叉树,“大顶堆”中根元素总比叶子元素大,“小顶堆”中根元素总比叶子节点小。当然要创建这样的堆结构还是有一定难度的,请自行参考其他资料。
这里我们使用到的是 STL 中的 priority_queue 这个结构,这个默认就是一个“大顶堆”,所以用这个数据结构我们来实现排序就很简单了。代码...
分类:
编程语言 时间:
2015-08-21 19:35:26
阅读次数:
209
选择排序
思想:每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完。
关键问题:在剩余的待排序记录序列中找到最小关键码记录。
方法:
–直接选择排序
–堆排序
(1)简单的选择排序
1、基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数...
分类:
编程语言 时间:
2015-08-21 15:37:35
阅读次数:
227
在数据结构中,堆其实就是一棵完全二叉树。我们知道内存中也有一块叫做堆的存储区域,但是这与数据结构中的堆是完全不同的概念。在数据结构中,堆分为大根堆和小根堆,大根堆就是根结点的关键字大于等于任一个子节点的关键字,而它的左右子树又分别都是大根堆;小根堆与大根堆恰好相反。在C++的STL中优先队列pr.....
分类:
编程语言 时间:
2015-08-20 22:13:28
阅读次数:
215
1、 堆排序的思想 输入一个数组,利用一组二叉树的操作使其变成有序的数组,就是堆排序 堆排序利用的是二叉树的思想,操作对象是数组,所以数组需要在逻辑上映射到二叉树上,由于数组的下标是连续的,而二叉树中只有完全二叉树和满二叉树是连续的,所以将数组元素逐个映射到完全二叉树上,然后配备一系列的操作即可.....
分类:
编程语言 时间:
2015-08-19 22:56:57
阅读次数:
231
前言 因为在前文的《STL算法剖析》中,源代码剖析许多,不方便学习,也不方便以后复习。这里把这些算法进行归类,对他们单独的源代码剖析进行解说。本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的高速排序,而是交叉利用各种排序:堆排序、插入排序和高速排序;这样做的目的是提高....
分类:
编程语言 时间:
2015-08-19 22:53:42
阅读次数:
134
本文假设你已对堆排序的算法有基本的了解。
要分析stl中heap的源码的独到之处,最好的办法就是拿普通的代码进行比较。话不多说,先看一段普通的堆排序的代码:...
分类:
其他好文 时间:
2015-08-19 13:25:51
阅读次数:
94
15. 蛤蟆的数据结构进阶十五排序实现之堆排序
本篇名言:“谁要是游戏人生 ,
他就一事无成 ; 谁不能主宰自己 ,
永远是一个奴隶。--
歌德”
继续来看下堆排序。
欢迎转载,转载请标明出处:
1. 堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索...
分类:
编程语言 时间:
2015-08-17 23:42:25
阅读次数:
210
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=...
分类:
编程语言 时间:
2015-08-17 23:19:40
阅读次数:
174