Javascript实现归并排序
来源:互联网 发布:centos ntfs 挂载 编辑:程序博客网 时间:2024/05/21 04:22
归并排序
将一个数组二等分, 比如原数组为[9,2,6,4,8,10,1,3];
分成 [9,2,6,4] [8,10,1,3]
如果数组长度大于2 继续往下分
[9,2] [6,4];
长度小于2的话 就对无法再分的数组进行排序
[2,9] [4,6]
排序好后 进行归并 ,就是将两个数组按顺序凑到一个新数组里
这时候申请一个新数组,长度为两个数组的和 即长度为4的数组 arr = [ ?,? ,? ,? ]
将这四个数 进行比较 放入新数组里
arr1 = [2,9] arr2 = [4,6];
L1为 arr1的 数组下标计数 L2为 arr2的数组下标计数 初始都为0
进行比较 如果 arr1[L1]> arr2[L2] 2>4 不成立就把 arr1[L1]放入 arr中 然后 L1加1
然后再进行比较 arr1[L1]>arr2[L2] 9>4 成立 就把 arr2[L2]放入 arr中 L2加一
也就是将他们之中 最小的那个放入新数组中,然后下标加一,再进行比较,一直到新数组被填满 返回新数组
下面是代码
var shuzu = new Array(9,6,20,4,2,99,44,325);var guibing = function(arr){//分割数组 如果该数组长度大于2 继续分割 否则返回一个排序好的长度为 1或2的数组var divide = function(arr,length){var mid = Math.round((length)/2);if(length>2){var arr1 = arr.splice(0,mid);return merge(divide(arr1,arr1.length),divide(arr,arr.length));}else{return sortArr(arr,length);}}//归并排序 arr1,arr2是两个已排序好的数组 对两个数组进行排序var merge = function (arr1,arr2){console.log('归并的两个数组:',arr1,arr2);var arr0 = new Array(arr1.length+arr2.length);var L1 = 0;//数组1的计数器var L2 = 0;//数组2的计数器for(var i = 0,L1=0,L2=0;i<arr0.length;i++){if(L1==arr1.length){arr0[i] = arr2[L2];L2++;continue;}if(L2==arr2.length){arr0[i] = arr1[L1];L1++;continue;}if(arr1[L1]<arr2[L2]){arr0[i] = arr1[L1];L1++;}else{arr0[i] = arr2[L2];L2++;}}console.log('归并结果',arr0);return arr0;}//把长度为1 或 2 的数组排序好var sortArr = function(arr,length){if(length!=1&&arr[0]>arr[1]){var temp = arr[1];arr[1] = arr[0];arr[0] = temp;}console.log('排序好的数组:',arr);return arr;}return divide(arr,arr.length);}var result1 = guibing(shuzu);console.log(result1);
1 0
- JavaScript实现归并排序
- Javascript实现归并排序
- 归并排序c++和javascript实现
- 啃算法:归并排序及JavaScript实现
- 归并排序(JavaScript)
- 归并排序(Java&&JavaScript)
- JavaScript排序之归并排序
- (四)c++和JavaScript实现归并排序
- 归并排序的实现
- 归并排序Java实现
- 归并排序的实现
- 【归并排序+实现】
- 归并排序的实现
- 归并排序 C++实现
- 归并排序(简单实现)
- 归并排序的实现
- Java实现归并排序
- 归并排序实现
- JNIEnv解析
- POJ 1861 - MST - Krustral
- 程序员们该活动活动了 ,北京的同行们给你们推荐点北京好玩的地方
- 关于shell部分语句解释
- spark-1.6.3最新版改动
- Javascript实现归并排序
- Qt学习笔记(二)
- 本地svn安装及使用
- poj 1942 Paths on a Grid(组合数学--组合数)
- 逻辑推理与判断(谜语博士的难题)
- SOLID 原则
- grails的一对一、一对多关系
- 图解SOAPUI解析WSDL文件
- 时间管理:四种事情