快速排序(Quicksort),又称划分交换排序,简称快排!
基本思想:
1.数据集中,选择一个元素作为基准(pivot)元素
2.所有小于基准的元素,移到基准的左边,大于的则移到基准的右边,这一操作可称为分区(partition)
3.对基准元素左右两边的两个子集,重复步骤1和步骤2,直到所有子集只剩下一个元素为止。
function quickSort(array) {
// 互换元素位置
function swap(array, i, j) {
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
function partition(array, left, right) {
var storeIndex = left;
// 选取最后一个数字作为基准元素
var pivot = array[right];
for(var i = left; i < right; i++) {
if(array[i] < pivot) {
swap(array, storeIndex, i);
// 交换位置后,storeIndex自增1,表示下个可能要交换位置的元素
storeIndex++;
}
}
//将基准元素放置到最后的正确位置上
swap(array, right, storeIndex);
return storeIndex;
}
function sort(array, left, right) {
if(left > right) {
return;
}
var storeIndex = partition(array, left, right);
sort(array, left, storeIndex - 1);
sort(array, storeIndex + 1, right);
}
sort(array, 0, array.length - 1);
return array;
}
console.log('quickSort', quickSort([67, 3, 5, 43, 21, 90, 12, 56]));