首页 > 其他 > 详细

堆排序算法---《程序员必须知道的10大基础实用算法及其讲解》

时间:2014-07-21 10:21:23      阅读:286      评论:0      收藏:0      [点我收藏+]
>

原帖地址:http://www.oschina.net/question/1397765_159365

快速排序算法的基本特性:

时间复杂度:O(N * logN)

堆排序为不稳定排序,不适合记录较少的排序。

var arr = [],
	count = 100,
	i = 0,
	parentIndex,
	exeCount = 0,
	startTime = + new Date(),

	stackSort = function(a){

		if(a.length === 1) return a;

		var sorted,
			len,
			tmpLen;

		// 构建小顶堆
		for(len = tmpLen = a.length;len--;){

			parentIndex = 
				len % 2 === 0 ? 
					len / 2 - 1 :  //右子节点
					(len - 1) / 2; //左子节点

			parentIndex < 0 && ( parentIndex = 0 );

			if(a[len] < a[parentIndex]){
				a[parentIndex] = [ a[len], a[len] = a[parentIndex] ] [0]; // 交换数组中2个数
			}
		}

		sorted = [ a.shift() ];

		exeCount++;

		return sorted.concat( stackSort(a) );

	};

// 构建随机数组
for(;i<count;i++){
	arr.push( Math.round(Math.random() * count) ); // 0 - count
}

console.log(‘原来的数组:‘, arr);

arr = stackSort(arr);

console.log(‘排序后的数组:‘, arr);
console.log(‘计算的次数:‘ + exeCount );
console.log(‘花费的毫秒数:‘ + (new Date() - startTime) );



堆排序算法---《程序员必须知道的10大基础实用算法及其讲解》,布布扣,bubuko.com

堆排序算法---《程序员必须知道的10大基础实用算法及其讲解》

原文:http://my.oschina.net/arrowing/blog/292578

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!