以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];以上就是本文的全部内容,希望对大家的学习有所帮助。
原文链接:https://www.f2er.com/js/48942.html