首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >吾有一术,名曰快排.

吾有一术,名曰快排.

作者头像
seth-shi
发布2023-12-18 15:01:35
发布2023-12-18 15:01:35
1140
举报
文章被收录于专栏:seth-shi的专栏seth-shi的专栏
  • 最近刷leet-code的一到题目时, 找到第k大的数字, 需要对一个数组进行排序.
  • 发现自己只会最基础的冒泡排序, 插入排序.
  • 然后就去补习了一下插入排序, 对着网上给的动态图, 写了一份自己的快速排序, 代码都差不多.
代码语言:javascript
复制
// 1. 选择一个基准数量(可选第一个, 也可随机选数组的一个)
// 2. 双指针遍历, 右指针先动
// 3. 右指针找到比基准小的数, 停下
// 4. 左指针开始动, 当找到比基准打的数,停下
// 5. (3,4)步骤找到的数交换
// 6. 重复(3,4,5), 直到满足条件 7
// 7. 左右指针碰撞, 再交换一次值(防止之前是一个倒序数组)
func quickSort(data []int, left, right int)  {

	if left >= right {
		return
	}


	pivotIndex := partition(data, left, right)


	quickSort(data, left, pivotIndex - 1)
	quickSort(data, pivotIndex + 1, right)
}

func partition(data []int, left, right int) int {

	pivotIndex := left
	pivot := data[pivotIndex]
	for left != right {


		if data[right] > pivot {
			right --
			continue
		}

		// 增加等于符号, 防止基准位置右边有和基准数一样的数字
		// 导致进入死循环不停的交换两个值
		if data[left] <= pivot {
			left ++
			continue
		}


		data[left], data[right] = data[right], data[left]
	}

	data[left], data[pivotIndex] = data[pivotIndex], data[left]

	return left
}

leet-code

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档