章节简述
本章主要介绍堆,用该数据结构解决下面两个重要的问题:
排序,采用堆排序算法对n元数组排序,所花的时间不会超过O(nlogn),而且只需要几个字的额外空间;
优先级队列,堆通过插入新元素和提取最小元素这两种操作来维护元素集合,每个操作所需的时间都为O(logn);
本章采用自底向上的组织结构,从细节开始逐步过渡到正题。
堆数据结构
该部分介绍堆数据结构的设计思想。...
分类:
其他好文 时间:
2015-06-19 18:51:01
阅读次数:
156
最近做了一个用Unity3D动态演示堆排序过程的程序。堆排序(Heap sort) 堆排序总是建立这样一个二叉树:其父结点总大于其子结点。 首先建堆。 每轮将根结点与最后一个结点互换,然后对剩余部分建堆。您可以在此下载安卓APK。
分类:
编程语言 时间:
2015-06-17 13:22:15
阅读次数:
169
Sort a linked list in O(n log n)
time using constant space complexity.
分析:排序算法中,堆排序、归并排序、快速排序、希尔排序的时间复杂度是nlogn,堆排序和归并排序对下标依赖性比较强,比较适合顺序表的排序,对链表处理起来比较复杂。希尔排序用的比较少。所以我选择的是快速排序,结果是正确的,但时间超出限...
分类:
其他好文 时间:
2015-06-17 11:41:17
阅读次数:
108
---恢复内容开始---从开始准备学编程就一直听算法算法。算法个毛东西?今天开始我就开始准备接触算法算法那么首先就是排序:排序大概份四种排序: 交换排序: 包括冒泡排序,快速排序。 选择排序: 包括直接选择排序,堆排序。 插入排序: 包括直接插入排序,希尔排序。 合并排序: 合并排序。...
分类:
编程语言 时间:
2015-06-16 22:44:14
阅读次数:
163
Description 编写程序堆排序算法。按照非递减排序,测试数据为整数。Input 第一行是待排序数据元素的个数; 第二行是待排序的数据元素。Output 一趟堆排序的结果。Sample Input1231050 36 41 19 23 4 20 18 12 22Sample Output14 ...
分类:
编程语言 时间:
2015-06-16 16:05:13
阅读次数:
161
//堆排序C++实现
#include
#include
using namespace std;
void HeapSort(int* arr, int cnt)
{
function percdown = [&](int* arr, int i, int cnt) //下滤操作
{
int child = 0, tmp = 0;
for (tmp = arr[i]; 2 * ...
分类:
编程语言 时间:
2015-06-13 09:53:00
阅读次数:
205
1. 堆排序是一种不稳定的排序,时间复杂度是O(nlogn),最差也是O(nlogn),堆排序也可看成是一个“完全二叉树”,其中MinHeap经常被当作最小优先队列。堆排序的过程:每次弹出堆的堆顶元素,然后把堆的最右下叫元素交换,然后重新调整堆。调整堆主要依据:找左/右子节点的最大的那个元素,然后交...
分类:
其他好文 时间:
2015-06-08 14:40:20
阅读次数:
210
常见排序算法包括以下七种:选择排序、冒泡排序、插入排序、快速排序、希尔排序、堆排序、归并排序。
在学习具体算法实现并进行比较前,先来学习算法比较的几个维度。
一是稳定性
所谓稳定性,是指值相等的两个元素在排序前后是否会发生位置的交换。如果不会发生交换,则认为是稳定的算法;反之,则认为是不稳定的排序算法。
二是时间复杂度,指执行算法所需的时间长短。简单说就是算法执行的快慢程序。
三是空间复杂...
分类:
编程语言 时间:
2015-06-08 11:40:43
阅读次数:
240
一.堆介绍堆,是一棵完全二叉树,根的值大于左右子树中所有结点的值,左右子树也是堆,除此之外,对其它元素之间的大小关系(如左右子树之间元素大小关系)没有要求。这是大根堆,如果把“大于”换成“小于“,就是小根堆,这里都以大根堆为例。由于堆是完全二叉树,所以可以用..
分类:
编程语言 时间:
2015-06-05 17:55:09
阅读次数:
245
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。
本文将依次介绍上述八大排序算法。
算法一:插入排序
插入排序示意图
插入排序是一种最简单直观的排序算法,...
分类:
编程语言 时间:
2015-06-05 12:28:08
阅读次数:
137