快速排序(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]));