- 浏览: 442739 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (158)
- J2SE (15)
- c/c++ (17)
- linux & ubuntu (20)
- js (18)
- algorithm (21)
- android (1)
- software (3)
- svn (1)
- db (6)
- other (19)
- css (5)
- go (1)
- html 5 (3)
- computer science (1)
- php (3)
- 创业 (8)
- EJB & jboss (1)
- TDD (1)
- jsp & servlet (2)
- http, tcp & ip (2)
- hibernate (1)
- json (1)
- 乐 (2)
- ps (2)
- netbeans (1)
- extjs (2)
- eclipse (4)
- 项目管理 (1)
- varnish (2)
- study abroad (1)
- python (1)
- erlang (1)
- math (1)
- shell (1)
- assembly (4)
- lucene (1)
- web (1)
- http (1)
- tcp & ip (1)
最新评论
-
yiguxianyun:
...
css li 不换行 -
stdayong:
...
netbeans 中使用 maven -
程序猿_星:
为啥会中文乱码啊
servlet 以 gzip 格式返回数据 -
huanhuan519:
感谢分享~
gdb 调试工具 -
heyl1234:
写过些js,对css还不熟。谢谢~
css li 不换行
heapsort
------
heap 数据结构
heap 是以 nearly complete binary tree 存储数据的,
tree height = lg(n+1),
max-heap:
A[i] >= A[sub(i)], 即 父节点 >= 子节点
------
heapsort 基本原理
首先将 heap 组装为 max-heap,则 root node 为最大值,
每组装1次 max-heap,就将 root node 取出放大结果数组中,
这样遍历 n-1 次后,就获得了已排序的数组,
------
heapsort 性能
时间复杂度: o(n*(lg n))
空间复杂度: o(n)
------
例子:
* javascript
* html
------
------
heap 数据结构
heap 是以 nearly complete binary tree 存储数据的,
tree height = lg(n+1),
max-heap:
A[i] >= A[sub(i)], 即 父节点 >= 子节点
------
heapsort 基本原理
首先将 heap 组装为 max-heap,则 root node 为最大值,
每组装1次 max-heap,就将 root node 取出放大结果数组中,
这样遍历 n-1 次后,就获得了已排序的数组,
------
heapsort 性能
时间复杂度: o(n*(lg n))
空间复杂度: o(n)
------
例子:
* javascript
var arr_heap = [ 78, 13, 6, 177, 26, 90, 288, 45, 62, 83 ]; /** * heapsort * 原理:采用 nealy complete binary tree 进行排序 * 时间复杂度: o(n*(lg n)) , 空间复杂度: o(n) */ function HeapSort(arrInit) { this.arrInit = arrInit; } /** 根据 pos 获得 node,pos 从 1 开始 */ HeapSort.prototype.getNodeByPos = function(arr, pos) { return arr[pos - 1]; }; /** 根据 pos 设置 node,pos 从 1 开始 */ HeapSort.prototype.setNodeByPos = function(arr, pos, value) { return arr[pos - 1] = value; }; /** 左 子节点的 位置,位置从 1 开始 */ HeapSort.prototype.leftPos = function(arr, pos) { var x = pos * 2; return x <= arr.length ? x : undefined; }; /** 右 子节点的 位置 */ HeapSort.prototype.rightPos = function(arr, pos) { var x = pos * 2 + 1; return x <= arr.length ? x : undefined; }; /** 父节点的 位置,位置从 1 开始 */ HeapSort.prototype.parent = function(pos) { return Math.floor(pos / 2); }; /** * 单节点 max-heap 时,对 节点 和 子节点 位置执行的替换操作,并用返回值标识 if & which 位置改变了 * * @param arr * @param pos * @return 如果3个node已ok,则返回 -1,否则进行排序 并返回原来最大的位置 */ HeapSort.prototype.maxHeapBasic = function(arr, pos) { var max = pos; var left = this.leftPos(arr, pos); var right = this.rightPos(arr, pos); if (left && this.getNodeByPos(arr, left) > this.getNodeByPos(arr, pos)) { max = left; } if (right && this.getNodeByPos(arr, right) > this.getNodeByPos(arr, max)) { max = right; } if (max == pos) { return -1; } else { var tmp = this.getNodeByPos(arr, pos); this.setNodeByPos(arr, pos, this.getNodeByPos(arr, max)); this.setNodeByPos(arr, max, tmp); return max; } }; /** * 由下而上构建 max-heap 时,对某节点执行 max-heap 操作 * * @param arr * @param pos * 节点位置,从1开始 * @return */ HeapSort.prototype.maxHeap = function(arr, pos) { var max = pos; do { max = this.maxHeapBasic(arr, max); } while (max >= 1); }; /** * 构建 max-heap * * @param arr * @return */ HeapSort.prototype.buildMaxHeap = function(arr) { for ( var pos = Math.floor(arr.length / 2); pos >= 1; pos--) { this.maxHeap(arr, pos); } }; /** * 排序 * * @return */ HeapSort.prototype.sort = function() { var result = new Array(); // a copy of input array var arr = this.arrInit.slice(); for ( var pos = arr.length; pos >= 2; pos--) { this.buildMaxHeap(arr); // 创建 max-heap,顶部是 当前剩余数组的 最大值 result.unshift(arr.shift()); // 最大值写入 结果数组,并从原数组删除 } result.unshift(arr.shift()); // 最后1个元素 return result; };
* html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="js/heap_sort.js"></script> </head> <body> <input type="button" value="heap sort" onclick="alert(new HeapSort(arr_heap).sort());" /> </body> </html>
------
发表评论
-
c - linkedlist
2012-05-10 14:52 1079c - linkedlist store ordere ... -
c - word counter (binary-tree)
2012-05-09 14:17 1723c - word counter (binary-tree) ... -
link archor
2012-04-02 21:26 1334link archor http://www.x ... -
define subclass - js
2012-03-09 14:24 1631define subclass - js --- ... -
js closure
2012-03-02 18:21 1049js closure scope: in j ... -
js array methods
2012-03-02 15:14 2470js array method array ha ... -
js logic operator
2012-01-16 21:41 909logical expression of js ... -
random select
2011-08-28 01:00 1203random select problem: ... -
sparse data structure - matrix
2011-08-18 20:03 1077sparse data structure sp ... -
max sub_sequence - c
2011-08-10 01:02 1072max sub_sequence - c /* ... -
binary search - c
2011-08-06 12:07 1089binary search - c (simple) ... -
bit_array - simple use
2011-05-28 23:47 1005bit array,use less memory to de ... -
linkedlist - java 简单实现
2011-02-11 21:29 1592linked list 链表, - ... -
queue (用 java 简单实现)
2011-02-03 01:45 4047queue ------ 结构 线性存 ... -
Medians and Order Statistics (次序统计)
2011-01-03 14:36 2825Medians and Order Statistics - ... -
counting sort
2011-01-02 20:36 1562counting sort ------ counting ... -
quick sort
2011-01-01 20:26 1188quicksort ------ quicksort ove ... -
js 检验 Array
2011-01-01 20:13 854检验是否是 Array 工具方法: function ... -
priority queue
2010-12-22 00:11 2268priority queue priority queue ... -
merge sort
2010-12-01 23:37 1148merge sort 合并排序 ------ merge ...
相关推荐
heap Sort. In briefly, it had been done with java.
堆排序(Heap Sort)是一种基于比较的排序算法,它的核心思想是利用二叉堆的数据结构特性来实现排序。本文将详细介绍堆排序的实现步骤、重要概念以及相关操作。 首先,我们要理解什么是堆。堆是一种特殊的树形数据...
it is a source code of heap sort ,so the number of words enough?
堆排序 堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法
标题中的“test_heap_sort.rar_heap”表明这是一个关于堆排序(Heap Sort)的程序实现,使用了VC++(Visual C++)编程语言。堆排序是一种基于比较的排序算法,它的核心思想是利用二叉堆的数据结构来对数组进行排序。...
AlgorithmMan by Iori,AlgorithmMan是使用Winform技术开发的一套用于算法演示的工具。 HeapSort为AlgorithmMan中的堆排序演示工具(这是可执行文件;需要.net 4.0支持;非源代码)。 原文:C#算法设计排序篇之06-堆...
它的主要思想是将待排序的序列构造成一个大顶堆(或小顶堆),此时,整个序列的最大值(或最小值)就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值(或最小值)。然后将剩余n-1个元素重新构造成一个...
堆排序是一种基于比较的排序算法,它通过构造一个大顶堆或小顶堆来实现排序。在C#中实现堆排序,我们可以分为两个主要步骤:建堆和调整堆。这里,我们将深入探讨堆排序的基本原理、C#实现的细节以及其在实际应用中的...
本文实例讲述了PHP排序算法之堆排序(Heap Sort)。分享给大家供大家参考,具体如下: 算法引进: 在这里我直接引用《大话数据结构》里面的开头: 在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的...
插入排序(Insertion Sort)是一种简单直观的比较排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用...
- **堆排序(Heap Sort)**:利用二叉堆结构进行排序,时间复杂度为O(n log n)。 2. **在C语言中实现排序函数:** 实现这些排序算法时,你需要定义一个函数,接受一个指针数组和长度作为参数。例如,你可以创建一...
堆排序(Heap Sort) 插入排序(Insertion Sort) 引入排序(Intro Sort) 迭代归并排序(Iterative Merge Sort) 归并插入排序(Merge Insertion Sort) 归并排序(Merge Sort) 最高有效数字优先的基数排序(Msd ...
heap-sort code
堆排序的主算法(Heap-Sort)首先将原始数组构建为最大堆,然后将堆顶元素(当前最大值)与末尾元素交换,这样末尾就得到了排序后的最大值。接着,对剩下的元素重新调整为最大堆,再将堆顶元素与末尾交换,如此反复...
6. **堆排序(Heap Sort)**:利用堆这种数据结构实现的排序方法,效率较高,常用于大数据集。 7. **计数排序(Counting Sort)、桶排序(Bucket Sort)、基数排序(Radix Sort)**:这些是针对特定类型数据(如...
6. **堆排序(Heap Sort)**:利用堆这种数据结构所设计的一种排序算法,能在O(n log n)的时间复杂度内完成排序。 7. **计数排序(Counting Sort)**:非基于比较的排序算法,适用于整数排序,尤其在数据范围不大的...
经典排序算法 - 堆排序Heap sort序 经典排序算法 - 地精排序Gnome Sort 经典排序算法 - 奇偶排序Odd-even sort 经典排序算法 - 梳排序Comb sort 经典排序算法 - 耐心排序Patience Sorting 经典排序算法 - 珠...
1. 冒泡排序(Bubble Sort) def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): ...7. 堆排序(Heap Sort) 8. 计数排序(Counting Sort) 解压密码 douge
最大堆排序(MaxHeap Sort)是一种基于比较的排序算法,它利用了数据结构中的最大堆特性来实现排序。最大堆是一种特殊的二叉堆,每个父节点的值都大于或等于其子节点的值,通常以数组的形式存储。下面将详细介绍最大...
1. 冒泡排序(Bubble Sort) ...6.堆排序(Heap Sort) 7. 计数排序(Counting Sort) 8. 桶排序(Bucket Sort) 9. 基数排序(Radix Sort) 10. 希尔排序(Shell Sort) 解压密码 douge