首页 > 代码库 > 堆排序算法---《程序员必须知道的10大基础实用算法及其讲解》
堆排序算法---《程序员必须知道的10大基础实用算法及其讲解》
>
原帖地址: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) );
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。