首页 > 编程语言 >快速排序算法实现 (y总课后)

快速排序算法实现 (y总课后)

时间:2022-12-26 22:22:05浏览次数:44  
标签:int quicksort while ++ 算法 课后 矿工 排序 指针

主要思路:


1、确定 边界 l——————————r  (left right)

2、确定中间值  l————————x——————————r

3、优雅快排:

设置两个指针i,j。

i从左边开始运行 j从右边开始运行 不断判断 判断与x的大小关系 小于x放左边 大于x放右边

 

讲的有点抽象

所以我引入一个自创比喻
两个黄金矿工(i,j)从两头向中间开始挖矿,两个人都有相同的总目标黄金大小x,但是两个人的具体目标不同,i矿工喜欢小的,j矿工喜欢大的。挖到黄金就放在原地先不动,回头路的时候一起收获。

但是有时候也会遇到陷阱(转移法阵)虽然上面放着黄金,但是一旦触碰到,该黄金矿工就会强制停止,直到另一位矿工开到陷阱。然后两者的陷阱黄金需要置换,一位痛失大的,一位痛失小的。

 

具体实现代码:

#include <iostream>
using namespace std;

const int N = 1000010;//创造一个足够大的数组

int n;

int q[N];


void quicksort(int q[], int l, int r)
{
if (l >= r)return;//左大于右 显然需要去除该情况

int x = q[l + r >> 1],i =l-1,j =r+1;// 未来(?)和以前的我: 这个>> 是什么意思??
//在这里解释:向右移动一位 (二进制) 亲爱的 那笔写一下 10 的二进制 然后 右缩进一位 试试看
while (i < j)
{
do i++; while (q[i] < x);//指针开始向右移动
do j--; while (q[j] > x);//指针开始向左移动 有一种反方向的钟的感觉
if (i < j) swap(q[i], q[j]);//指针遇到不符合的情况卡住了 两者换位置
}
quicksort(q, l, j);
quicksort(q, j + 1, r);

}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)scanf("%d", &q[i]);
quicksort(q, 0, n - 1);
for (int i = 0; i < n; i++)printf("%d ", q[i]);
return 0;

 

}

标签:int,quicksort,while,++,算法,课后,矿工,排序,指针
From: https://www.cnblogs.com/ChenDOU/p/17007057.html

相关文章

  • Atcoder Beginner Contest ABC 283 Ex Popcount Sum 题解 (类欧几里得算法)
    题目链接令\(p=\lfloor\frac{n-r}m\rfloor\),则我们其实是要对所有\(0\lei\le29\)求\(\sum_{j=0}^p(\lfloor\frac{mj+r}{2^i}\rfloormod\2)\)。右边那个东西如果没......
  • C语言冒泡排序代码演示
     //---------冒泡排序 voidbubble_sort(intarr[],intsz) {   //确定冒泡排序的趟数   inti=0;   for(i=0;i<sz-1;i++)   {......
  • 动态规划算法
    动态规划基本概念阶段问题的过程被分成若干相互联系的部分,我们成为阶段,以便按一定的次序求解。状态某一阶段的出发位置成为状态,通常一个阶段包含若干状态。决策对问......
  • 一些排序算法的学习笔记
    大纲:冒泡排序插入排序选择排序快速排序归并排序堆排序一、冒泡排序简述:把一个数组看成一个装水的桶,数组中的每个元素的值代表其质量。一开始这些元素被我用箩筐......
  • 安卓逆向 -- 自吐算法(MD5和SHA)
    一、主要框架,hook代码主要填写在try代码块里packagecom.bucuo.a20210908;importandroid.app.Application;importandroid.content.Context;importandroid.util.Log;impor......
  • 安卓逆向 -- 自吐算法(DES)
    一、DES算法源码DESKeySpecdeskey=newDESKeySpec("123456789".getBytes(StandardCharsets.UTF_8));//将密钥实例化SecretKeyFactorykey=SecretKeyFactory.getInstanc......
  • SQL中利用ORDER BY排序结果
    刚开时学习SQLServer的你不知道有没有这样的一个困扰,如下MyTable表,Id字段作为一个排序列,排序为何如此的不整齐,怎样让它查询时按我想要的顺序排列呢,这就要用到SQL中的ORDRB......
  • BSGS算法学习小记(大步小步算法)
    简介先看一个式子xy≡z(modp),z是质数现在只知道x和z,要求y。大步小步算法(BSGS,BabyStepsGiantSteps)就是解决这个问题。算法流程暴搜的枚举范围根据费马小定理:xp−1≡1。......
  • CTC算法学习笔记
    CTC算法在OCR或语音识别任务中,经常出现不知道从哪里开始对齐比如对​​apple​​,OCR出aaappppllle这种东西如果只是简单的去重的话就变成了​​aple​​ConnectionistT......
  • 带修改的莫队算法学习小记
    简介莫涛大神创造出的离线询问算法的带修改版。算法基础:需要掌握​​莫队算法​​,会打暴搜(暴力)。一个叫莫的双端队列。只支持单点修改操作方法普通的不带修改的莫队算......