算法 & 理解快速排序

1. 什么快速排序

快速排序是冒泡排序的升级版,排序本质是循环,快速循环,指的就是循环很快,那这个快速排序自然就是减少循环次数来提升更快的循环了。

2. 快速排序思想

快速排序主要的核心思想就是:选基点、后排序、再分治 最后递归重复

2.1 选基点

arr = [10, 2, 9, 12, 8, 20, 30, 4]
在 arr 数组中选择任意一个数字作为左右两边比较的基点,比如我们选择 10

2.2 后排序

将小于10的放左边、大于10的放右边
arr = [2, 9, 8, 4, 10, 20, 30, 12]

2.3 再分治

分割 [2, 9, 8, 4] 和 [20, 30, 12] 出来,然后重复 2.1 和 2.2 步骤

3. 代码案例分析

function swap(arr, i, j) {
    
    
	let temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp
}
function QuickSort(arr, low, high) {
    
    
	if (low >= high) return
	// 1. 选基点 
	let i = low, j = high, pivot = arr[low]
	while(i < j) {
    
    
		// 2. 排序
		while (arr[j] >= pivot && i < j ) {
    
     // 右边大于基点的忽略掉,向前走
			j --
		}
		while (arr[i] <= pivot && i < j ) {
    
     // 左边小于基点的忽略掉,向前走
			i ++
		}
		swap(arr, i, j) // 最后肯定发生右边小于基点,左边大于基点,此时进行交换位置即可
	}
	swap(arr, low, j) // 排序后别完了还要把基准点的值放到左右两边中间,这里的 j 也可以换成 i
	// 3. 分割左右两边,然后重复以上步骤
	QuickSort(arr, low, j - 1)
	QuickSort(arr, j + 1, high)
	return arr
}
let arr = [10, 2, 9, 12, 8, 20, 30, 4]
QuickSort(arr, 0, arr.length - 1)
// 排序后
// arr: [2, 4, 8, 9, 10, 12, 20, 30]

完!

猜你喜欢

转载自blog.csdn.net/cookcyq__/article/details/124876157
今日推荐