【算法】简单快速排序、标准快速排序

161 阅读1分钟

一、简单快速排序

let arr = [4, 1, 6, 9, 3, 2, 8, 7];

function quickSort(arr) {
	if(arr == null || arr.length == 0) return [];
	let leader = arr[0];
	let left = [];
	let right = [];
	for (let i = 1; i < arr.length; i ++) {
		if(arr[i] < leader) left.push(arr[i]);
		else right.push(arr[i]);
	}
	left = quickSort(left);
	right = quickSort(right);
	left.push(leader);
	return left.concat(right);
}
console.log(quickSort(arr))

二、标准快速排序

let arr = [4, 1, 6, 9, 3, 2, 8, 7];

function swap(arr, a, b) {
	let temp = arr[a];
	arr[a] = arr[b];
	arr[b] = temp;
}

function quickSort(arr, begin, end) {
	if(begin >= end - 1) return false;
	let left = begin;
	let right = end;
	do {
		do left ++; while (left < right && arr[left] < arr[begin]);
		do right --; while (left < right && arr[right] > arr[begin]);
		if(left < right) swap(arr, left, right)
	} while(left < right); // 直到left 比 right大停止循环
    
        // 第一位和谁交换
        let swapPoint = left == right ? right - 1 : right;
        swap(arr, begin, swapPoint);

        // 递归
        quickSort(arr, begin, swapPoint)
        quickSort(arr, swapPoint + 1, end)
	
}
quickSort(arr, 0, arr.length);
console.log(arr)

截屏2022-05-22 下午5.04.54.png

截屏2022-05-22 下午5.05.09.png

截屏2022-05-22 下午5.05.19.png

此时,比 4 小的连接到了一起,比 4 大的也都连到了一起,

得到的结果为: [4, 1, 2, 3, 9, 6, 8, 7];

再交换第一位的位置:

截屏2022-05-22 下午5.28.34.png

然后使用递归的思想,对左边的再进行排序 quickSort(arr, begin, swapPoint);

对右边的再次排序 quickSort(arr, swapPoint + 1, end);