??????從數(shù)組中選取一個(gè)數(shù)據(jù)作為基準(zhǔn),一般默認(rèn)數(shù)組中第一個(gè)數(shù)據(jù)闯捎,然后比基準(zhǔn)小的放到左側(cè)椰弊,比基準(zhǔn)大的放到右側(cè)完成第一輪后分割出兩組數(shù)組,左邊永遠(yuǎn)比右邊小瓤鼻,依次再進(jìn)行分割直到只剩下一個(gè)數(shù)據(jù)無(wú)法分割返回秉版。
第一種排序方法
function quickSort (array) {
var size = array.length;
function sort (start, end) {
if(start >= end) return;
var nonius = start;
var flag = array[start];
var j = end;
while(nonius < j){
for(;nonius < j; j--){
if(flag > array[j]){
array[nonius] = array[j];
nonius++;
break;
}
}
for(;nonius < j; nonius++){
if(array[nonius] > flag){
array[j] = array[nonius];
break;
}
}
}
array[nonius] = flag;
sort(start, nonius);
sort(nonius+1, end);
}
sort(0, size);
return array;
}
第二種排序方法
function quickSort (array) {
var size = array.length;
function sort (start, end) {
if(start >= end) return;
var nonius = start;
var flag = array[start];
for(var i = start;i < end; i++){
if(flag > array[i]){
array = array.slice(0, start).concat([array[i]], array.slice(start));
array.splice(i+1, 1);
nonius++;
}
}
sort(start, nonius);
sort(nonius + 1, end);
}
sort(0, size);
return array;
}
第三種排序方法
function quickSort (arr) {
if(arr.length <= 1) return arr;
var size = arr.length;
var left = [];
var right = [];
var flag = arr[0];
for(var i = 1; i < size; i++){
if(arr[i] >= flag){
right.push(arr[i])
}
if(arr[i] < flag){
left.push(arr[i])
}
}
return quickSort(left).concat([flag], quickSort(right));
}