看到一篇很好的博文,来自http://blog.csdn.net/morewindows/article/details/6709644下面是博文内容堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆...
分类:
其他好文 时间:
2014-09-10 19:19:10
阅读次数:
214
排序算法及其比较课程设计报告一、设计内容编程实现希尔、快速、堆排序、归并排序算法,并利用程序统计每种算法的执行时间。要求随机产生10000(或50000、100000、200000,由用户选择)个数据存入数据文件,然后读数据文件,分别采用不同排序方法进行排序,将结果存入另一个文件中。二、设计思想描述...
分类:
其他好文 时间:
2014-09-10 17:38:30
阅读次数:
211
算法导论:任意一个比较排序算法,在最坏的情况下,至少要做n*lg(n)次的比较,因此堆排序与归并排序是渐近最优的比较排序算法但计数排序、基数排序和桶排序都不采用比较的方式来确定元素的顺序,因此下界n*lg(n)对它们并不适用计数排序假设被排序的元素都在范围[0, k]中,k为正整数,当k=O(n)的...
分类:
其他好文 时间:
2014-09-09 20:05:59
阅读次数:
201
堆排序
堆,heap,是二叉树的一种。小根堆有这样的性质——任意一个结点的值比它的左右孩子都要小。
排序思想
将待排元素看作是完全二叉树,物理上用一维数组存储。
实现堆排序需要解决两个问题:
1.如何将杂乱的完全二叉树初始化为一个堆?
答:从最后一个非叶结点起,将该节点当做根,自上而下进行调整,使之成为一个堆。然后依次对倒数第二个、倒数第三个、直至正数第一个结点进行此操作。
2.输出...
分类:
其他好文 时间:
2014-09-09 12:59:48
阅读次数:
165
本文主要是解析选择排序算法:直接选择排序和堆排序。一、直接选择排序 基本思想: 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已...
分类:
其他好文 时间:
2014-09-09 11:58:28
阅读次数:
140
稳定性、内 外存储、有序区、无序区稳定性(个人理解),原来相同的数相对位置不变,就是稳定的。平均时间复杂度最差时间复杂度辅助空间(空间复杂度)稳定否?最好时间复杂度选择排序不稳定希尔排序不稳定堆排序不稳定快排N*log(N)N2需要一个栈空间来实现递归最坏为N, 可以是log(N)不稳定冒泡N2N2...
分类:
其他好文 时间:
2014-09-09 11:33:58
阅读次数:
198
1 //goal: heap sort 2 //time: 9/7/2014 3 //author: zrss 4 //reference: introduction to algorithms 5 6 #include 7 #include 8 9 #define MAX_DATA 10...
分类:
其他好文 时间:
2014-09-09 10:29:28
阅读次数:
233
1 class Heap{ 2 private: 3 int m[1000]; 4 int size; 5 public: 6 Heap(int s) :size(s){} 7 Heap(int *num, int s) :size(s){ 8 f...
分类:
其他好文 时间:
2014-09-07 15:58:55
阅读次数:
240
个人感觉堆排序还是在排序算法中比较难懂的,看了一段时间。准备把其中的思路理一理。首先,堆分为大根堆和小根堆。堆是满足下列性质的数列{r1, r2, …,rn}: 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。那么如何进行排序呢? 1. 我们要把序列构建为堆,建堆的核心就是不断的调....
分类:
其他好文 时间:
2014-09-07 13:26:55
阅读次数:
205