经典排序之二 快速排序 + 二路归并
2017-06-22 15:09
232 查看
快速排序,顾名思义效率相比较其他排序方法高,它是一种交换排序
基本思路是
1:将待排序数组的中间见作为一个参考值
2:大于参考值的 放右边的数组,小于参考值的放左边的数组
3:对左右两个数组做1,2操作,直至数组里只有一个数值
基本思路是
1:将待排序数组的中间见作为一个参考值
2:大于参考值的 放右边的数组,小于参考值的放左边的数组
3:对左右两个数组做1,2操作,直至数组里只有一个数值
function quickSort(arr){ if(arr.length <=1 ){ return arr; } //splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。 会改变原数组 //Math.floor() 方法对一个数进行往下取整 小于等于x,且与x最接近的整数 var temp = arr.splice(Math.floor(arr.length/2),1)[0]; var arrLeft = []; var arrRight = []; for(var i=0;i<arr.length;i++){ if(arr[i]>=temp){ arrRight.push(arr[i]); } else { arrLeft.push(arr[i]); } } console.log("左边的数组:"+ arrLeft+ "参考值" + temp + "右边的数组:"+ arrRight + "总数组"+ arr) return quickSort(arrLeft).concat(temp,quickSort(arrRight));
//return arguments.callee(arrLeft).concat(temp,arguments.callee(arrRight)); 不推荐使用arguments.callee } var arr1 = [9,2,1,2,8,546,23,0]; quickSort(arr1); 左边的数组:2,1,2,0 参考值8 右边的数组:9,546,23 总数组9,2,1,2,546,23,0 左边的数组:1,0 参考值2 右边的数组:2 总数组2,1,0 左边的数组: 参考值0 右边的数组:1 总数组1 左边的数组:9,23 参考值546 右边的数组: 总数组9,23 左边的数组:9 参考值23 右边的数组: 总数组9 [0, 1, 2, 2, 8, 9, 23, 546]二路归并
//新的知识点 While 循环会在指定条件为真时循环执行代码块。 只要指定条件为 true,循环就可以一直执行代码。 function merge(left,right){ var result = [], il= 0, ir=0; while(left.length>il && right.length>ir){ if(left[il]<right[ir]){//挨个比较 result.push(left[il++]) } else { result.push(right[ir++]) } console.log(result); } while(left[il]){//当两个数组的长短不一致,比较完成以后剩余的数字再添加上去 result.push(left[il++]) } while(right[ir]){ result.push(left[ir++]) } } var arr1 = [2,3,4,78,90,100]; var arr2 = [1,58,77,79,91]; merge(arr1,arr2) [1] [1, 2] [1, 2, 3] [1, 2, 3, 4] [1, 2, 3, 4, 58] [1, 2, 3, 4, 58, 77] [1, 2, 3, 4, 58, 77, 78] [1, 2, 3, 4, 58, 77, 78, 79] [1, 2, 3, 4, 58, 77, 78, 79, 90] [1, 2, 3, 4, 58, 77, 78, 79, 90, 91]
相关文章推荐
- 【重温经典算法之二】快速排序
- 数据结构经典排序---二路归并排序
- 经典算法之二:归并排序
- 白话经典算法系列之五 归并排序的实现
- Algorithms - 排序算法之二:快速排序
- 可视化排序(插入/选择/冒泡/快速/归并/Shell)
- 白话经典算法系列之二 直接插入排序的三种实现
- C#实现所有经典排序算法(选择排序,冒泡排序,快速排序,插入排序,希尔排序)
- 微软笔试题 大型文件外部排序(二路归并和k路归并的实现和比较)
- 经典算法:快速排序
- 冒泡、快速、归并排序课程设计
- 经典算法回顾:快速排序
- 两种归并排序算法的实现:二路归并排序和基本归并排序(虚拟消除递归的二路归并排序)
- 二路归并排序
- 快速排序 经典百白话解说
- 快速排序经典实现
- 二路归并排序,C++代码实现
- 插入 希尔 排序 堆排序 冒泡 快速 归并
- 白话经典算法系列之五 归并排序的实现
- 第五篇:逆向之二路归并排序