快速排序

思路:自我定位明确,意思就是说我这个元素应该站在什么位置,需要确定。怎么确定?当我左边的元素都比我小,我右边的元素都比我大时,不说其他元素,总之排序完成后我就是站在这个位置,当所有元素都完成自我定位,那排序也就完成了,所以我们只需要找到自我定位的索引即可
画图软件真的用起来好累
借用人家的动图: Alt

快速排序的重点是找出每个元素应该的索引

给出JS代码
function findIndex(arr, star, end) {	// 定义找索引的函数
	let i = star
	let j = end
	let x = arr[i]   //基准值
	while(i<j) {		//只要头尾没重合,说明还没找完
		// 找右边小于基准的值
		while(i<j&&arr[j]>=x){		// 而且后面的值大于基准值
			j--						// 从尾部开始的指针向前移动
		}
		if(i<j){					// 如果能跳出while循环说明小于基准值的元素找到了
			arr[i] = arr[j]			// 将找到的元素填入空位,该元素为空位
			i++						// arr[i]就不考虑了
		}
		
		//找左边大于基准的值
		while(i<j&&arr[i]<x) {		// 如果小于基准就过
			i++
		}
		if(i<j) {
			arr[j] = arr[i]				//将arr[i]填入空位
			j--						//arr[j]不考虑了
		}
	}
	arr[i] = x					//完成所有填为之后,将取出的基准值填入最后一个空位,此时i=j
	return i  					// 返回找到的索引
}

function qucikSort(arr, star, end){		//定义排序函数,递归方法
	if(star<end) {			//如果头尾没重合,说明还没有全部明确定位
		let index = findIndex(arr, star, end)
		quickSort(arr, star, index-1)
		quickSort(arr, index+1, end)
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值