Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub

#003- 快速排序

快排核心思想是 :

选定一个基准x,将比x小的值放到左边,比x大的值放到右边。

const partition = (arr, left, right) => {
	let x = arr[left];
	let i = left;
	let j = right;
	
	while(i < j) {
		//先从前往后找小的,没找的的话一直继续
			while( i < j && arr[j] > x) {
				j --;
			}
			//找到了,将值填入坑里面,a[j]又变成了坑
			if(i < j) {
				a[i] = a[j];
			}
			
			//然后从前往后找大的,没找到继续找。
			while(i < j && arr[i] < x) {
				i ++;
			}
			//找到了,将值填入之前的坑里。
			if(i < j) {
				a[j] = a[i]
			}
		}
		
		//将基准值填入坑
		a[i] = x;
		return i;
	}
	
	const quickSort = (arr,left,right) => {
		const length = arr.length;
		const start = left || 0;
		const end = right !== undefined ? right : length - 1;
		
		if(start < end) {
			const index = partition(arr, start, end;)
			quickSort(arr, start, index - 1);//调整基准值左边
			quickSort(arr,index + 1,end); //调整基准值右边
		}
		return arr;
	}

使用:
const newArr = [2, 3, 1, 4, 6, 5, 9, 8, 7];

// 测试下
let result = quickSort(newArr);
console.log(result);   // [1, 2, 3, 4, 5, 6, 7, 8, 9]

未完待续。。。

#快排算法2

算法参考某个元素值,将小于它的值放到左数组中,大于它的值放在右数组中。然后进行递归进行左右数组的操作。返回合并的数组就是已经排好顺序的数组了。

function quickSort(arr) {
	if(arr.length < = 1) {
		return arr;
	}
	let leftArr = [];
	let rightArr = [];
	let q = arr[0];
	
	for(let i = 1; i < arr.length; i ++) {
		if(arr[i] > q) {
			rightArr.push(arr[i])
		} else {
			leftArr.push(arr[i])
		}
	}
	return [].concat(quickSort(leftArr),[q],quickSort(rightArr));
}

module.exports = quickSort;

一个容易理解的快排动画

Edit this page
最近更新: 2025/12/2 01:46
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人