JavaScript希尔排序、快速排序、归并排序算法

以var a = [4,2,6,3,1,9,5,7,8,0];为例子。

1.希尔排序。

希尔排序是在插入排序上面做的升级。是先跟距离较远的进行比较的一些方法。

0){ for (var k = 0; k < gap; k++) { var tagArr = []; tagArr.push(arr[k]) for (i = k+gap; i < len; i=i+gap) { temp = arr[i]; tagArr.push(temp); for (j=i-gap; j >-1; j=j-gap) { if(arr[j]>temp){ arr[j+gap] = arr[j]; }else{ break; } } arr[j+gap] = temp; } console.log(tagArr,"gap:"+gap);//输出当前进行插入排序的数组。 console.log(arr);//输出此轮排序后的数组。 } gap = parseInt(gap/2); } return arr; }

过程输出:

由输出可以看到。第一轮间隔为5。依次对这些间隔的数组插入排序。 间隔为5:

间隔为2:

排序后: [0,9]

间隔为1: 排序后: [0,9]。

2.快速排序。

把一个数组以数组中的某个值为标记。比这个值小的放到数组的左边,比这个值得大的放到数组的右边。然后再递归 对左边和右边的数组进行同样的操作。直到排序完成。通常以数组的第一个值为标记。 代码:

3.归并排序。

把一系列排好序的子序列合并成一个大的完整有序序列。从最小的单位开始合并。然后再逐步合并合并好的有序数组。最终实现归并排序。 合并两个有序数组的方法:

var len1 = arr1.length,len2 = arr2.length,i=0,j=0,arr3=[],bArr1 = arr1.slice(),bArr2 = arr2.slice();

while(bArr1.length!=0 || bArr2.length!=0){
if(bArr1.length == 0){
arr3 = arr3.concat(bArr2);
bArr2.length = 0;
}else if(bArr2.length == 0){
arr3 = arr3.concat(bArr1);
bArr1.length = 0;
}else{
if(bArr1[0]<=bArr2[0]){
arr3.push(bArr1[0]);
bArr1.shift();
}else{
arr3.push(bArr2[0]);
bArr2.shift();
}
}
}
return arr3;
}

归并排序:

排序[4,0]输出:

看出来从最小的单位入手。

第一轮先依次合并相邻元素:

4,2; 6,3; 1,9; 5,7; 8,0 合并完成之后变成: [2,8]

第二轮以2个元素为一个单位进行合并:[

2,4],[3,6]; [1,9],[5,7]; [0,8],[]; 合并完成之后变成:[2,8]

第三轮以4个元素为一个单位进行合并:[

2,6],[1,9]; [0,[] 合并完成之后变成: [1,8];

第四轮以8个元素为一个单位进行合并:

[1,[0,8]; 合并完成。 [0,9];

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关文章

阅读本文之前,分享大家一张图片,看图会发现JavaScript开发...
Promises是一种关于异步编程的规范,目的是将异步处理对象和...
引子 Patrick Catanzariti 是一名Web开发工程师,最近他在 s...
小编吐血整理加上翻译,太辛苦了~求赞! 本文主要总结了Java...
微软于今日(2015年12月10日)宣布即将开源Chakra核心控件,...
通过统计数据库中的1000多个项目,我们发现在 JavaScript 中...