快速排序"的思想很簡單,整個排序過程只需要三步:
(1)在數(shù)據(jù)集之中,選擇一個元素作為"基準(zhǔn)"(pivot)。
(2)所有小于"基準(zhǔn)"的元素,都移到"基準(zhǔn)"的左邊;所有大于"基準(zhǔn)"的元素,都移到"基準(zhǔn)"的右邊。
(3)對"基準(zhǔn)"左邊和右邊的兩個子集,不斷重復(fù)第一步和第二步,直到所有子集只剩下一個元素為止。
var quickSort = function(arr) {
if (arr.length <= 1) { return arr; }
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0];//取出基準(zhǔn)元素,原始數(shù)組并且刪除該元素
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++){
if (arr[i] < pivot) {
left.push(arr[i]);//小于基準(zhǔn)的往左邊數(shù)組放
} else {
right.push(arr[i]);//大于基準(zhǔn)的往右邊數(shù)組放
}
}
//左邊的數(shù)組 + 基準(zhǔn)元素 +右邊數(shù)組 ,即為有序數(shù)組
return quickSort(left).concat([pivot], quickSort(right));
};
js很直觀,但是看了java的很多就不直觀