1.快速排序
这次好好整理了一下,记录下来。
我了解到的一种是比较好理解的算法,见代码:
function quicksort(arr){
//异常处理
if(arr.length<=1) return arr;
var jizhun=Math.floor(arr.length/2);
var one=arr.splice(jizhun,1)[0];
var left=[];
var right=[];
for(var i=0;i<arr.length;i++){
if(arr[i]>one){
right.push(arr[i]);
}
if(arr[i]<=one){
left.push(arr[i]);
}
}
return [...quicksort(left),one,...quicksort(right)];
}
arr=[1,5,4,2,5,6,8,5,4,1267,4];
console.log(quicksort(arr));
第一种比较好理解,不做赘述。 下面说一下第二种: 核心公式:
function quicksort(arr, start, end) {
if(start>=end) return arr;
var i = start;
var j = end;
var baseline = Math.floor((start+end) / 2);
while (i <= j) {
while (arr[j] > arr[baseline]) {
j--;
}
while (arr[i] < arr[baseline]){
i++;
}
if (i <= j) {
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
i++;
j--;
}
}
return i;
}
function test(arr, start, end) {
if(arr.length<1){
return arr;
}
var index = quicksort(arr, start, end);
if (start < index - 1) {
quicksort(arr,start, index - 1);
}
if (end > index - 1) {
quicksort(arr,index, end);
}
return arr;
}
arr = [8, 7, 6, 5, 4, 3, 2, 1]
console.log(test(arr, 0, 7));
未完待续...