`
ordinary
  • 浏览: 79483 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

计算机程序设计艺术-----堆排序

阅读更多
堆排序:一种基于堆的排序算法;
一些基础概念
堆定义:
当且仅当该序列满足如下性质(简称为堆性质):
(1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ n) //ki相当于二叉树的非叶结点,K2i则是左孩子,k2i+1是右孩子
若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:
树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。
下图为数组对应的大根堆和小根堆。

堆的高度:
堆可以被看成是一棵树,结点在堆中的高度可以被定义为从本结点到叶子结点的最长简单下降路径上边的数目;定义堆的高度为树根的高度。我们将看到,堆结构上的一些基本操作的运行时间至多是与树的高度成正比,为O(lgn)
大根堆的堆排序思想:
1) 初始化R[1…n]为大根堆,该堆为无序的;
2) 交换R[1]和R[n],R[1…n-1]为无序的,R[n]为有序的;
3) 初始化R[1…n-1]为大根堆;
4) 交换R[1]和R[n-1],R[1…n-2]为无序的,R[n-1…n]为有序的;
依次重复,知道排好序为止。
算法如下:
/**
* 建立堆
* heap为需要建堆的数组,
* root建堆的起始根
* index为未排序的最后叶子节点
*/
private static void createHeap(int[] heap, int root, int index) {
int left;
int right;
int tmp;
if(root>=index){
return ;
}
while (root >= 0) {
left = root << 1;
right = (root << 1) + 1;
if (right <= index) {
if (heap[root] < heap[right]) {
tmp=heap[root];
heap[root]= heap[right];
heap[right]=tmp;
createHeap(heap, right, index);
}
}
if (left <= index) {
if (heap[root] < heap[left]) {
tmp=heap[root];
heap[root]= heap[left];
heap[left]=tmp;
createHeap(heap, left, index);
}
}
root--;
}
}

public static void heapSort(int[]heap, int index) {
int i, j, Temp;
// 将二叉树转成Heap
for (i = (index / 2); i >= 1; i--)
createHeap(heap,i, index);
// 开始进行堆排序
for (i = index ; i >= 1; i--) {
Temp = heap[i]; // Heap的Root值和最后一个值交换
heap[i] = heap[0];
heap[0] = Temp;
createHeap(heap,0, i-1); // 对其余数值重建堆
System.out.print("排序中: ");
for (j = 0; j <= index; j++)
System.out.printf("%3s", heap[j]);
System.out.println("");
}
}
分享到:
评论

相关推荐

    计算机程序设计艺术-高德纳

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由美国计算机科学家唐·艾伦·高德纳(Donald Ervin Knuth)撰写。这部多卷本巨著深入探讨了算法设计、分析以及编程语言的设计原理,对于理解计算机科学的...

    计算机程序设计艺术

    《计算机程序设计艺术》是一套深受程序员和计算机科学爱好者推崇的经典著作,由计算机科学家Donald E. Knuth撰写。这套书籍分为四卷,每卷都涵盖了不同的主题,旨在深入探讨算法和程序设计的核心概念。其中: 第一...

    《计算机程序设计艺术(第3卷)》 第3卷:排序与查找 (第二版) 高清中文版 PDF

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由著名计算机科学家Donald Knuth撰写。这本书的第3卷专门探讨了排序与查找这两个核心的算法主题,它们是编程和数据处理的基础。在本卷中,Knuth深入剖析了...

    计算机程序设计艺术PDF

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由美国计算机科学家Donald Knuth撰写。这套书共计三卷,深入探讨了算法和程序设计的精髓,为读者提供了丰富的理论基础和实践经验。每一卷都包含了大量精心...

    计算机程序设计艺术卷1-4合集

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由世界知名计算机科学家Donald E. Knuth撰写。这本书全面深入地探讨了程序设计的原则、方法和技术,旨在提高程序员的技能和对计算机系统的理解。卷1-4合集...

    计算机程序设计艺术+第3卷:排序与查找(第二版)高清中文版

    《计算机程序设计艺术》是由美国计算机科学家Donald Knuth所著的一套经典计算机科学丛书,它在IT领域享有极高的声誉,被众多专业人士视为必读之作,包括比尔·盖茨在内的许多技术大牛都曾给予高度评价。这套书籍深入...

    计算机程序设计艺术 第 3 卷 (中文版)

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由Donald E. Knuth撰写。这部巨著分为多卷,每一卷深入探讨了程序设计的各个方面。本问题中提到的是第3卷,虽然描述中提到了第2卷,但我们的焦点在于第3卷的...

    《计算机程序设计艺术》全三卷中文版PDF

    《计算机程序设计艺术》是由计算机科学巨匠Donald E. Knuth所著的一部经典之作,全书分为七卷,但目前公开的只有前三卷。这部作品深入探讨了计算机编程的各个方面,是程序员和计算机科学家的重要参考文献。在这里,...

    计算机程序设计艺术(中文版)

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由著名计算机科学家Donald Knuth撰写。这本书深入探讨了算法和程序设计的高级技术,旨在提高软件开发者的技艺和理解。中文版的出版使得更多的中国读者能够...

    计算机程序设计艺术英文版高清123卷.pdf

    《计算机程序设计艺术》(The Art of Computer Programming)是由计算机科学巨匠Donald E. Knuth撰写的一套权威性算法分析丛书。这套书籍以其深入浅出的讲解方式、严谨的数学分析和对计算机科学的深刻洞察而闻名,是...

    计算机程序设计艺术(中文版)pdf三卷合集

    《计算机程序设计艺术》是由著名计算机科学家唐纳德·艾夫森·克努斯(Donald Ervin Knuth)编著的一部计算机科学巨著。这部作品涵盖了算法分析、编程技术、排版系统等多个领域的深度知识,是计算机科学领域内的重要...

    【文件】计算机程序设计艺术(第4卷)第0册(双语版)组合算法与布尔函数概论.pdf

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由著名计算机科学家Donald E. Knuth撰写。这部巨著共分为七卷,其中第4卷主要关注组合算法,而第0册则是对这一卷的预备知识,特别是组合算法与布尔函数的...

    计算机程序设计艺术(三卷合集)

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由美国计算机科学家Donald Knuth撰写。这套三卷合集深入探讨了程序设计的艺术与科学,是程序员和算法研究者的宝贵资源。每一卷都包含了丰富的算法知识,对于...

    计算机程序设计艺术第1卷中文版

    《计算机程序设计艺术》是由Donald E. Knuth编写的计算机算法理论的经典著作,第一卷名为《基础算法》(Fundamental Algorithms),这本系列书籍被广泛认为是计算机科学领域的权威著作之一,是学习算法和数据结构不...

    计算机程序设计艺术 第 2 卷 (中文版)

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由Donald Ervin Knuth(D.E. Knuth)撰写。这本书分为多卷,全面而深入地探讨了程序设计的各个方面,特别是算法的设计与分析。第二卷,即我们讨论的重点,...

    计算机程序设计艺术(第3卷)

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由著名计算机科学家Donald Knuth撰写。这部系列作品全面深入地探讨了程序设计的各个方面,旨在提高程序员的技艺和软件的质量。第三卷,通常称为“排序与搜索...

    计算机程序设计艺术第四卷

    《计算机程序设计艺术》是计算机科学领域的一部里程碑式的作品,由著名计算机科学家Donald E. Knuth撰写。这部著作共分为七卷,其中第四卷尤为关键,深入探讨了排序和搜索算法这一核心主题。本篇将围绕第四卷及其...

    计算机程序设计艺术(中文版)高德纳三卷合集

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由世界著名的计算机科学家Donald E. Knuth撰写。这本书中文版的三卷合集涵盖了计算机编程的多个核心领域,包括基本算法、排序与查找以及半数值算法。以下是...

    计算机程序设计艺术 第四卷 英文版

    《计算机程序设计艺术》是计算机科学领域的一部经典之作,由世界著名计算机科学家Donald Knuth撰写。这部巨著分为多卷,每一卷都深入探讨了编程和算法的各个方面。第四卷,即我们讨论的重点,主要关注组合算法。下面...

    计算机程序设计艺术(第三卷)

    《计算机程序设计艺术》是计算机科学领域的一部经典著作,由美国计算机科学家Donald Knuth撰写。这部巨著分为多卷,全面深入地探讨了程序设计的理论与实践,特别是算法的设计、分析和优化。第三卷主要关注排序和搜索...

Global site tag (gtag.js) - Google Analytics