堆排序主要分为两步:创建最大堆和提取堆中最大元素。 首先,定义MAX-HEAPIFY函数: 该算法的时间复杂度为:T(n)=O(lgn); 创建最大堆:BUILD-MAX-HEAP 该函数的时间复杂度为:T(n)=O(nlgn); 选出最大元素构成有序序列:HEAP-SORT 该函数的时间复杂度为: ...
分类:
编程语言 时间:
2016-06-28 11:01:03
阅读次数:
176
这是最基本的两种排序算法,比它效率高的还有归并排序,堆排序,快速排序等算法,作为一个IT民工应该好好掌握。 冒泡排序和选择排序都有两层循环,下面逐一介绍: 冒泡排序: 1.外层循环,控制冒泡次数,起始从loop=1开始,结束标识是loop<length,循环length-1次(从数组的第二个数开始冒 ...
分类:
编程语言 时间:
2016-06-28 09:33:18
阅读次数:
188
堆的定义如下:n个元素的序列(K1,K2......Kn)当且仅当满足Ki<=K2i&&Ki<=K2i或Ki>=K2i&&Ki>=K2i(i=1,2,3,...n/2)时称之为堆 以一维数组作为堆的存储结构,堆可以看成一个完全二叉树。 最大堆:每个父节点的都大于孩子节点。最小堆:每个父节点的都小于孩 ...
分类:
编程语言 时间:
2016-06-27 23:04:17
阅读次数:
219
#include<stdio.h>//堆排序(大顶堆)
#include<stdlib.h>
#defineMaxSize50
#defineMinSize2
typedefstruct//堆的结构
{
int*nData;//存储堆元素
intnSize;//堆长度
}MyHeap;
//从堆的最后一个结点插入,依次向上(父节点)比较,调整合适位置退出
intInCreas..
分类:
编程语言 时间:
2016-06-27 12:29:12
阅读次数:
151
用例: 将一组数据从大到小进行排列 10, 16, 18, 12, 11, 13, 15, 17, 14, 19 size=10 步骤1.根据数组初始化堆 步骤2.从最后一个根节点( 下标为(size-1-1)/2 )开始往第一个根节点遍历,依次将每个最小子树排好序,建造一个小堆: 步骤3.进行堆排 ...
分类:
编程语言 时间:
2016-06-24 23:40:34
阅读次数:
265
//**留坑待填**// 一、基础知识题 10.1?以关键码序列(503,087,512,061,908,170,897,275,653,426)为例,手工执行以下排序算法,写出每一趟排序结束时的关键码状态: (1)直接插入排序; (2)希尔排序(增量d[1]=5); (3)快速排序; (4)堆排序 ...
分类:
编程语言 时间:
2016-06-23 01:03:36
阅读次数:
10028
课本源码部分 第10章 内部排序 - 堆排序 ——《数据结构》-严蔚敏.吴伟民版 源码使用说明 链接??? 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 课本源码合辑 链接??? 《数据结构》课本源码合辑 习题集全解析 链接??? 《数据结构题集》习题解析合辑 本源码引入的 ...
分类:
编程语言 时间:
2016-06-22 22:05:30
阅读次数:
170
1. 交换排序 (1)冒泡排序 (2)快速排序 2. 选择排序 (1)直接选择排序 (2)堆排序 3. 插入排序 (1)直接插入排序 (2)希尔排序 4. 合并排序 (1)合并排序 5. 非比较排序 (1)计数排序 (2)桶排序 (3)基数排序 ...
分类:
编程语言 时间:
2016-06-22 20:13:57
阅读次数:
207