首页 > 其他分享 >博客一号 快速排序

博客一号 快速排序

时间:2023-01-31 22:33:19浏览次数:45  
标签:sort 递归 int 博客 quick 一号 区间 排序

从零开始的算法之路

——基础算法之快速排序

有了sort函数为什么还要学习其他的排序,的确也看起来比较多余(就目前来看我做的排序题都能用sort解决),但是里面算法中的思想才是我们应该重要去理解的

  1. 快熟排序的思路

不多说上图。

第一步:取基准数

第二步:分区进行排序

从右至左查找

第三步:对两个区间递归进行分区间操作。

也就是说看完图解我们可以将快排总结为:

  1. 确定分界点,可以是q[l],q[r],q[(l+r)/2],就是起点,终点或者是中间值。
  2. 调整区间,就是说要用分界点来进行左右的排序,比如左边的就排比分界点小的,右边排大的。
  3. 开始进行递归排序,就是左半边还要递归,右边也是进行递归,不断的区分成更小的区间,在更小区间处理后,在返回到更大的区间,这个就是分治的思想,下一话的归并排序也是需要用到分治的思想。

接下来是代码的实现。

 我在这里就是实现的是函数部分。

 void quick_sort(int q[],int l,int r)//l代表的是起点,r代表的是终点,在这里由于是需要一个递归处理,所以不能单纯的用一次双指针来搜索,需要把每次的起点和终点给弄出来,所以在这里是l,r。

{

    if(l>=r) return;//如果起点大于等于终点就返回,就不用进行下去

    int i = l-1.j = r+1,x = q[(l+r)/2];//看到后面就知道为什么是i-1,r+1,,一个是从前往后面搜,一个是从后往前搜,想当于是一个双指针算法。

     while(i<j)//两指针相遇相当于搜完。

     {

        do i++;while(q[i]<x); //左半边小于自己规定的值,就要继续循环,如果找到大于的值,那么就先停下。

        do j--;while(q[j]>x); //右半边大于自己规定的值,就要继续循环,如果找到小于的值,那么就停下。

        if(i<j) swap(q[i],q[j]);//现在是找到了两个不符合条件的数字,那么就要进行交换。

        else break;//否则就可以直接跳出循环。

     } 

     quick_sort(q,l,j);//这个时候j已经走到了中间,就要进行函数的递归,所以是进行了一个左边的递归和右边的递归。

     quick_sort(q,j+1,r);

}

标签:sort,递归,int,博客,quick,一号,区间,排序
From: https://www.cnblogs.com/iolzyy/p/17081000.html

相关文章

  • Java插入排序
    下面我们创建一个java程序,实现使用插入排序对数组元素进行排序。插入排序对于小元素是有好处的,因为排序大量元素它需要更多的时间。让我们来看看一个简单的java程序,使......
  • Java选择排序
    在这个示例中,我们创建一个java程序,实现使用选择排序对数组元素进行排序。在选择排序算法中,搜索最低的元素并将其排列到适当的位置。用下一个最小的数字交换当前元素。......
  • Java气泡排序
    在教程中,将创建一个java程序,使用冒泡排序对数组元素排序。气泡排序算法也被称为最简单的排序算法。在冒泡排序算法中,数组从第一个元素遍历到最后一个元素。这里,将当前......
  • 【八大数据排序法】冒泡排序法的图形理解和案例实现 | C++
    第十四章冒泡排序法:::hljs-center目录第十四章冒泡排序法●前言●认识排序●一、冒泡排序是什么?1.简要介绍2.具体情况3.算法分析●二、案例实现1.案......
  • 第一个博客
    Markdonw学习#号空格就是标题,几个#号等于几级标题标题###三级标题####四级标题字体Hello,World!Hello,World!Hello,World!~~Hello,World!引用坚持学习,加油!!!引用,>+空......
  • 最后的博客
    当你在广阔无垠的互联网看到这篇文章,也许意味着我们可能有某种缘分吧。我相信缘分,会在不刻意的情况下让我遇到该遇到的人。于此,我是个天生丑陋且有缺陷的人。只是,这是天生的......
  • 搜索排序——搜索评价指标
    搜索排序一直是信息检索的研究重点,搜索排序的流程主要分为:召回层、粗排层、精排层、重排层,重排层主要考虑的是相关业务诉求和多样性要求,偏业务规则,此处我们只关注精排模型......
  • 博客园主题美化DIY教程
    感想因为受到友人启发,部署了个静态页面,想着太单调了,要不连博客园的修一修,就去网上翻找了一下,果然给我发现了,但是在DIY的中途,遇到一大堆问题,因为是几年前的源码了,很多......
  • vue3.2 element-plus ui el-date-picker组件日期显示错误,只显示每月一号
    参考:https://blog.csdn.net/just_didi/article/details/125427169不管怎么点,怎么选,只能切换到每个月的一号,后面查找了很多文章发现上述文章提到的将yyyy-MM-dd改成YY......
  • MySql中的指定顺序排序
    才发现MySQL中有个FIELD函数可以很方便的实现指定顺序排序。 语法:FIELD(value,val1,val2,val3,...)参数描述value必须。要在列表中搜索的值val1,val2,va......