各类排序算法总结三.交换类排序[接上]2.快速排序 快速排序是通过比较关键码、交换记录,以某个记录为界(该记录称为支点),将待排序列分成两部分。其中,一部分所有记录的关键码大于等于支点记录的关键码,另一部分所有记录的关键码小于支点记录的关键码。我们将待排序列按关键码以支点记录分成两部分的过程,称为一次划分。对各部分不断划分,直到整个序列按关键码有序. 如果每次划分对一个元素定位后,该元素的左侧子序...
分类:
其他好文 时间:
2014-08-05 22:41:20
阅读次数:
388
堆数据结构实际上是一种数组对象,是以数组的形式存储的,但是它可以被视为一颗完全二叉树,因此又叫二叉堆。堆分为以下两种类型:
大顶堆:父结点的值不小于其子结点的值,堆顶元素最大
小顶堆:父结点的值不大于其子结点的值,堆顶元素最小
堆排序的时间复杂度跟合并排序一样,都是O(nlgn),但是合并排序不是原地排序(原地排序:在排序过程中,只有常数个元素是保存在数组以外的空间),合并排序的多有元素都被...
分类:
其他好文 时间:
2014-08-05 22:34:10
阅读次数:
232
数据结构精要------直接选择和堆排序算法...
分类:
其他好文 时间:
2014-08-04 21:35:38
阅读次数:
245
排序算法总结(C语言版)1. 插入排序1.1 直接插入排序1.2 Shell排序2. 交换排序2.1 冒泡排序2.2 快速排序3. 选择排序3.1 直接选择排序3.2 堆排序4. 归并排序4.1 二路归并排序4.2 自然合并排序5. 分布排序5.1 基数排序1.插入排序1.1 直接插入排序...
分类:
编程语言 时间:
2014-08-01 23:04:42
阅读次数:
349
一、对堆排序的相关了解
1、堆排序的运行时间是 O(nlogn)
;
2、定义:
堆heap是一棵具有以下属性的二叉树——
(1)它是一棵完全二叉树;
(2)每个结点大于或等于它的任意一个孩子。
备注:完全二叉树的定义——除了最后一层没填满以及最后一层的叶子都是偏左放置的,其他层都是满的二叉树!
3、二叉堆有两种:最大堆和最小堆。在堆排序中我...
分类:
其他好文 时间:
2014-08-01 00:11:00
阅读次数:
269
第一次实现堆排序,花了近两个小时。
主要还是堆调整,原理网上很多,直接给出运行代码和结果:
代码:
#include
using namespace std;
void adjustHeap(int number[],int k,int length){
int t=number[k];
int i;
for(; k*2+1 < length; k=i){
i=k*2...
分类:
其他好文 时间:
2014-08-01 00:10:20
阅读次数:
285
堆排序,是数据结构中重要的排序方法,可以很快帮你找到最大值。在实际应用中,如最大优先级队列是大顶推的应用,可以很快找到优先级最高的队列。1.堆概念堆的定义如下,n个元素的序列{k1,k2,...kn},当且仅当满足如下关系:ki>=k2i 或者 ki=k2i+1 ...
分类:
其他好文 时间:
2014-07-31 02:36:55
阅读次数:
337
堆排序1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆,满足Key[..
分类:
其他好文 时间:
2014-07-30 15:05:24
阅读次数:
172
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆...
分类:
其他好文 时间:
2014-07-29 21:35:02
阅读次数:
434
堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。情形1:ki = k2i 且ki >= k2i+1 (最大化堆或大顶堆)其中i=1,2,…,n/2向下取整;若将和此序列对应的一维数组(即以一维数组作此序列的存...
分类:
其他好文 时间:
2014-07-28 15:08:53
阅读次数:
248