基本思想:

        1.先选取一个基准值(一般选取数组第一个元素)。

        2.以第一步选取的基准值为标准,然后从最后一个数值开始一步步向前走将数字与基准值进行比较,如果该值大于基准值,这个值的位置将在基准值的右边。

        3.如果该值小于基准值,那么这个值放在基准值的左侧。

        4.然后经过第一个元素作为基准值的排序,会有两个左右子序列,再分别对这两序列进行上述1,2,3的步骤!

附上运行原理框图:

思路取自于:快速排序算法_哔哩哔哩_bilibili

下面来进行代码的实现:

//该函数是快排的最重要的思想  一般面试的时候  写出这个就够了
int Partition(int* arr, int left, int right)  //划分函数,int返回的是基准值的下标
{int tmp = arr[left];  //将基准值提出来到tmp中while (left < right)    //这块的left < right就是判断序列中最少有两个值  值得进行排序{while (left<right && arr[right] > tmp)  //这块的left < right就是在left和right下标移动的时候  left = right的时候  退出while循环{right--;         //右边值大于基准值 right下标--  right指向的值不变}if (left == right)  //left和rigth下标相等的时候  直接退出循环{break;}arr[left] = arr[right];  //这块的代码的意思就是真的找到了一个right指向的值比基准值tmp小 这时将ar[rigth]赋值给arr[left]while (left<right && arr[left] <= tmp)  //这块给了 "<=" 上面那个while循环给了 ">" {                                      //这样就是为了防止数组arr中有重复值 其实上面给 >= 下面给 < 都可以  就是为了把重复值放到同一边这样一个作用                    left++;         //左边值小于基准值 left下标++  left指向的值不变}if (left == right){break;}arr[right] = arr[left];}arr[left] = tmp;    //这块left于right指向同一个下标return left;
}void Quick(int* arr, int left, int right)  //上图中的左下标和右下标
{if (left < right){int index = Partition(arr, left, right);if (left < index - 1)  //代表基准值左边子序列中最少有两个值(因为最少要有两个值才有排序的必要){Quick(arr, left, index - 1);}if (index + 1 < right){Quick(arr, index + 1, right);  //代表基准值右边子序列中最少有两个值}}
}void QuickSort(int* arr, int len)
{Quick(arr, 0, len - 1);
}

下面附上主函数以及运行结果:

int main()
{int arr[] = {12,35,11,78,94,132,45,68,99};int len = sizeof(arr) / sizeof(arr[0]);QuickSort(arr, len);show(arr, len);return 0;
}

运行结果:

运行平台vs2019  已成功运行  有需要直接Ctrl c  +    Ctrl v即可

快速排序(快排)--->注释超详细相关推荐

  1. 归并排序(代码注释超详细)

    归并排序: (复制粘贴百度百科没什么意思),简单来说,就是对数组进行分组,然后分组进行排序,排序完最后再整合起来排序! 我看了很多博客,都是写的8个数据呀什么的(2^4,分组方便),我就想着,要是10 ...

  2. java算法竞赛必备之快读快写(超详细解读)

    java算法竞赛必备之快读快写(超详细解读) java写算法的缺点:速度慢.读写复杂.莫名WA(错误答案).TL(超时).CL(超内存)- (那我们还学个啥啊,都转c++写算法不香嘛.)别急别急,有缺 ...

  3. 用Kotlin语言开发玩安卓,基于基于Material Design+AndroidX + MVP + RxJava + Retrofit等优秀的开源框架开发,注释超详细,方便大家练手

    WanAndroid 一位练习时长两年半的安卓练习生根据鸿神提供的WanAndroid开放Api来制作的产品级App,基本实现了所有的功能,使用Kotlin语言,基于Material Design+A ...

  4. c语言快排过程,快速排序(快排)C语言实现

    快速排序 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:经过一趟排序将要排序的数据分割成独立的两部分,其中一部分的全部数据都比另一部分的全部数据都要小,而后再按此方法对这两部 ...

  5. Git使用小技巧【修改commit注释, 超详细】

    通常有些朋友在 git  commit -m "xxxx" file.c 后,觉得注释的内容描述不够精准, 想将"xxxx"修改为"yyyy" ...

  6. TCP协议的服务器与客户端的程序设计(代码注释超详细)

    在上篇博客中讲到了三次握手和四次挥手: Linux网络编程--TCP中的三次握手和四次挥手_神厨小福贵!的博客-CSDN博客服务器编程和客户端编程的大致流程如下:三次握手是在客户端中的connect中 ...

  7. matlab三角形旋转动态,新手向!用WebGL写一个旋转的动态三角形,总共分三步!!(注释超详细!!)...

    html部分还是比较简单,引入的matrix.js是矩阵变换的一些方法,网上有很多,大家可以搜一搜(我的线性代数知识已经还给我的高数老师了,最近考虑着手捡起来) demo 下面是demo.js的代码 ...

  8. 【数据结构与算法】八大排序(中)快速排序 快排居然还能这么优化?快排的非递归该如何写?

  9. Java菜鸟笔记:Java猜字母游戏完整代码 注释超详细(三次机会,计算总分,可运行)

    import java.util.Scanner; import java.util.regex.Pattern; /*** 猜字母游戏,程序随机生成一个五个长度不重复的字母数组,要求用户也输入五个字 ...

最新文章

  1. [20160303]显示bbed x命令格式.txt
  2. 计算机网络ip地址的分类
  3. hdu 4556 Stern-Brocot Tree
  4. Azkaban启动与激活命令
  5. 块级元素(导航,图片,层)的水平和垂直居中
  6. AHK 中的字符串拼接和遍历操作
  7. wrieshark 指令
  8. 销售行业转行软件测试,这是我成功的感受...
  9. Android和ios的区别
  10. 基于python的智能风扇设计_[Micropython]TPYBoardV102 DIY智能温控小风扇
  11. mongodb插入查询速度测试
  12. Excel技能学习小结
  13. 大学物理 狭义相对论 思维导图总结
  14. 服务器自定义npc音乐,Custom NPC 自定义NPC模组自定义音乐添加教程
  15. 【拒绝花里胡哨】运维实用手册shell篇(无废话,全程暴力干货)
  16. 小傻蛋的妹妹跟随小甲鱼学习Python的第五节005
  17. 左手Python2 右手Python3,我该选择谁?
  18. 关于数据库主键和外键,索引
  19. iphonex 序列号_iPhonex序列号在哪看?iPhonex序列号查看方法介绍[图]
  20. 2021-08-30剑指 Offer 67. 把字符串转换成整数

热门文章

  1. 英特尔Intel® Arria® 10 FPGA加速器设计
  2. 图像超分辨率与天气预报
  3. 点击事件如何传递到Activity中
  4. DNC-cs6200 ospfv3
  5. android setAlpha 与 getBackground().setAlpha
  6. java设计模式----装饰器模式
  7. spring boot中的日志入门
  8. begin.lydsy 入门OJ题库:1104:纯粹合数
  9. PHP 显示文章发布日期 一小时前 一天前 一月前 一年前
  10. WebGoat教程学习(三)--Ajax安全