美文网首页
javascript:堆排序

javascript:堆排序

作者: 200813 | 来源:发表于2016-12-21 19:30 被阅读0次

堆排序是指利用(堆)这种数据结构所涉及的一种排序算法。堆积树是一个近似完全二叉树的结构,并同时满足堆属性:即子节点的键值总是小鱼(或者大于)他的父节点(大顶堆/小顶堆)。

算法描述:在堆积树的数据结构中堆积树中的最大值总是位于根节点(指大顶堆)。堆积树中定义一下几种操作:
(1)最大堆调整(Max_Heapify):将堆积树的末端子节点作调整,使得子节点永远小于父节点;
(2)创建最大堆(Build_Max_Heap):将堆积树所有数据重新排序;
(3)堆积排序:移除位在第一个数据的根节点,并做最大的堆积调整的递归运算

<script>
var HEAP_SIZE = 11;
// 获取父节点
function getParent(i) {
return Math.floor(i/2);
}
// 获取左子节点
function getLeft(i) {
return 2 * i;
}
// 获取右子节点
function getRight(i) {
return (2 * i + 1);
}
// 对单一子节点维持最大堆,调整堆,使其满足堆的定义
function Max_Heapify(A, i, heap_size) {
var l = getLeft(i);
var r = getRight(i);
var largest;
var temp;
if (l < heap_size && A[l] > A[i]) {
largest = l;
} else {
largest = i;
}
if (r < heap_size && A[r] > A[largest]) {
largest = r;
}
if (largest != i) {
temp = A[i];
A[i] = A[largest];
A[largest] = temp;
Max_Heapify(A, largest, heap_size);
}
}
// 由数组建立最大堆树结构
//数组A后一半一定是分支节点,从最后一个根开始调整出初始堆*/
function Buile_Max_Heap(A) {
for (var i = Math.floor(HEAP_SIZE/2); i >= 0; i--) {
Max_Heapify(A, i, HEAP_SIZE);
}
}
//打印最大堆二叉树
function printTree(A) {
for (var i = 0; i < HEAP_SIZE; i++) {
document.write(A[i] + '< br/>');
}
}
// 堆排序
function HeapSort(A, heap_size) {
var temp;
Buile_Max_Heap(A);
for (var i = heap_size-1; i >= 1; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
heap_size = heap_size - 1;
Max_Heapify(A, 0, heap_size);
}
printTree(A);
}
// 测试堆排序
var A = [111,1,3,2,116,9,10,14,8,7,1];
HeapSort(A, HEAP_SIZE);
</script>
结果:
1
1
2
3
7
8
9
10
14
111
116

相关文章

  • javascript:堆排序

    堆排序是指利用(堆)这种数据结构所涉及的一种排序算法。堆积树是一个近似完全二叉树的结构,并同时满足堆属性:即子节点...

  • Javascript和堆排序

    前言 这里以递归为例,参考自慕课网刘波波老师的C++版本实现 普通堆排序(实现了一个完整的堆) 普通的堆排序首先肯...

  • JavaScript 使用 堆排序

    堆 排序 JavaScript 使用 堆 进行对数组的排序 基本的概念 必须是完全二叉树 ((n - 1) 层必须...

  • JavaScript实现经典排序算法

    使用JavaScript实现的经典排序算法 util 冒泡 简单选择 直接插入 快速排序 堆排序 归并排序

  • 分解javascript 堆排序算法

    掌握算法,先理解原理 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉...

  • JavaScript - 排序算法 - 堆排序

    特点: 时间复杂度:O(nlog2n) 堆排序是不稳定的排序算法 原理: 利用大顶堆排序(升序) 利用小顶堆排序(...

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • JavaScript的排序算法——堆排序

    堆排序(Heap Sort) 堆排序(Heap Sort)是一种基于比较的排序算法。堆排序可以被认为是一种改进版的...

网友评论

      本文标题:javascript:堆排序

      本文链接:https://www.haomeiwen.com/subject/hioqvttx.html