js十大排序代码实现(二)
来源:互联网 发布:网络主播怎么赚钱 编辑:程序博客网 时间:2024/05/16 13:49
4.希尔排序(Shell Sort)
希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版》的合著者Robert Sedgewick提出的。
Javascript代码实现:
function shellSort(arr) { var len = arr.length, temp, gap = 1; console.time('希尔排序耗时:'); while(gap < len/5) { //动态定义间隔序列 gap =gap*5+1; } for (gap; gap > 0; gap = Math.floor(gap/5)) { for (var i = gap; i < len; i++) { temp = arr[i]; for (var j = i-gap; j >= 0 && arr[j] > temp; j-=gap) { arr[j+gap] = arr[j]; } arr[j+gap] = temp; } } console.timeEnd('希尔排序耗时:'); return arr;}var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];console.log(shellSort(arr));//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
5.归并排序(Merge Sort)
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。Javscript代码实现:
function mergeSort(arr) { //采用自上而下的递归方法 var len = arr.length; if(len < 2) { return arr; } var middle = Math.floor(len / 2), left = arr.slice(0, middle), right = arr.slice(middle); return merge(mergeSort(left), mergeSort(right));}function merge(left, right){ var result = []; console.time('归并排序耗时'); while (left.length && right.length) { if (left[0] <= right[0])="" {="" result.push(left.shift());="" }="" else="" result.push(right.shift());="" wh
阅读全文
0 0
- js十大排序代码实现(二)
- js十大排序代码实现(一)
- 十大经典排序算法js实现
- js三大排序算法实现代码
- js十大算法排序
- js十大排序算法
- js十大排序算法
- 十大排序算法实现
- JS的十大经典算法排序 》》
- JS的十大经典算法排序
- JS的十大经典算法排序
- 十大经典排序算法的 JS
- JS中的十大经典排序
- JS的十大经典算法排序
- JS的十大经典算法排序
- 十大排序算法 JAVA代码
- 十大排序算法【java代码】
- 十大排序算法 JAVA代码
- HDU6063-RXD and math
- linux(7)
- 等待多线程完成的CountDownLatch
- 独创共识机制POI:他们想改变原创内容的商业模式,帮助中小型的优质IP解决早期变现问题
- 空类
- js十大排序代码实现(二)
- Integer.parseInt()和Integer.valueOf()的区别
- Android初级开发(四)——补充2、spinner的简单使用
- 控制台游戏——五子棋
- 一些好的文章和网站,留着以后使用
- (转)Redis详解(二)---数据类型
- 从Docker Hub上下载Image并修改Image的Repository属性
- PHP的list
- 纯js 实现弹幕效果