快速排序

前言

快速排序定义:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

一、快速排序原理

快速排序说到底就是 选择一个base, 然后通过一顿瞎操作, 使得 当前数组变成 左小,base, 右大(小,大,都是相对于base 来说的)然后使用同样的方法将 上一步的左小排成 左小,base, 右大的格式, 将上一步的右大也排成 左小,base, 右大的格式, 这样不断的进行,最终变成了一个有序的数组

二、快速排序步骤

1.操作原理

  • 先从序列找到一个基准元素,一般选择第一个或者最后一个,对应的操作是不一样的
  • 扫描数列,将比基准数小的元素放在它的左面,比基准数大的,放在它的右面,得到左右两个区间
  • 再对左右两个区间执行第二步

快速排序的口诀; 快速排序的口诀,一选底, 二动指针分先后, 左基底右先行, 右基底左先行,指针相遇换基底,问题化小转递归,终止条件0,1 (个)数

2.操作步骤

在这里插入图片描述
第一步:先操作右指针,当遇到比44小时,停止指针,然后把指针的当前值放到坑里(此时的坑是第一个元素的位置)
第二步:操作左指针,挡遇到比44大时,把当前指针的值放到右指针指向的位置,再次移动右指针
第三部,依次操作,知道左右指针指向同一个位置,第一次结束

三,代码实现

void sort(int *data, int left, int right) {
	if (left >= right) return ;
	int i = left;
	int j = right;
	int key = data[left];
	while (i < j) {

		while (i < j && key <= data[j]) {
			j --;
		}
		data[i] = data[j];

		while (i < j && key >= data[i]) {
			i ++;
		}
		data[j] = data[i];
	}

	data[i] = key;
	sort(data, left, i - 1);
	sort(data, i + 1, right);
}
int quick_sort(int *data, int length) {

	sort(data, 0, length-1);

}

参考:

1:https://www.bilibili.com/video/BV1Ur4y1w7tv?p=13&t=51

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值