`

一个关于快排的问题

阅读更多
做1306的sorting algorithm的时候
一开始写的快排超时了
然后用ilovenwd师兄提供了下面的快排才过了


你快排写得不好.
试试一组 1000000 个0的数据.
参考一下下面这个
voidquick_sort(int*a,intn)...{
inti=0,j=n-1;
intx=a[n/2];
while(i<=j)...{
while(a[i]<x)i++;//注意<不是<=
while(a[j]>x)j--;
if(i<=j)swap(a[i],a[j]),++i,--j;
}

if(j>0)quick_sort(a,j+1);
if(i<n-1)quick_sort(a+i,n-i);
}
关键的不是左边或间.
而是 那个<和<=的区别.
你去看一些比较好的算法书.比如Robert Sedgewick那本.有详细分析.
如果你觉得取中间有可能O(n^2)就一开始就随机Shuffle一下.不过基本没必要.
===============
voidsort(intl,intr)
...{
inti,j,x,t;
i
=l;j=r;x=a[(l+r)/2];
do...{
while((a[i]<x)&&(i<r))i++;
while((a[j]>x)&&(j>l))j--;
if(i<=j)...{t=a[i];a[i]=a[j];a[j]=t;i++;j--;}
}
while(i<=j);
if(l<j)sort(l,j);
if(r>i)sort(i,r);
}
分享到:
评论

相关推荐

    TopK问题(大顶堆 + 快排)

    TopK问题(大顶堆 + 快排)

    python快排算法详解

    3、快排的原理:在数组中任意选择一个数字作为基准,用数组的数据和基准数据进行比较,比基准数字打的数字的基准数字的右边,比基准数字小的数字在基准数字的左边, 第一次排序之后分为比基准数据大或比基准数据小两...

    三个排序问题的实现(桶排,合并,随机快排)

    三个排序问题实现,用的是C语言,希望大家多多支持~~~~~~~~~~~真心希望能解决您的问题

    用蛮力法实现选择排序,冒泡排序程序;用减治法实现插入排序;分治法应用-快排,合并排序,0-1背包问题;Prim算法求最小生成树。伪代码以及java代码实现

    分治法可以用于快排、合并排序、0-1背包问题等问题。 Prim 算法求最小生成树也是一种常见的应用。 四、实验结果 在实验中,我们使用 Java 语言实现了选择排序、冒泡排序和插入排序的算法,并对其进行了测试。实验...

    最近点对问题的实现

    同时利用分割的思想为以y坐标排序的数组中,不需要每次都排序,而只需要使用它的父问题传入的y排序数组切割掉一部分即可,而最初的排序源于一次快排。算法一共递归logn次,每层计算量都为n,而主函数调用两次快排,...

    简易皮带机与简易耙矸机在复杂巷道施工中的应用

    为解决复杂巷道施工中的快速排矸问题,决定选用非传统的多设备接力的排矸方式(即2台简易耙矸机+溜槽耙矸机+2部简易皮带机+皮带机)排矸,从而提高了排矸速度,降低了安全风险,实现了安全高效快速掘进。

    化学金排12.0

    化学金排是目前最方便快捷、功能最强大的化学文章输入排版工具,利用化学金排可以轻松实现: 1:在大写状态下可以快速输入化学式方程式等而不用考虑上下标问题,其中在输入窗中输入其识别率几乎可以达到100%!并且...

    油井问题(算法设计与分析作业)

    注意:用快排做的不给分!! 友情提示:可以采用while(scanf("%d,%d",&x,&y) != EOF)的数据读入方式。 测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存...

    Quicksort-and-Randomized-Quicksort.zip_Randomizedquicksort_随机快速排

    快速排序与随机快速排序,并且解决问题,计数其中重复排序次数与最大最小次数

    代码 多目标快速非支配排序遗传算法优化代码

    代码 多目标快速非支配排序遗传算法优化代码代码 多目标快速非支配排序遗传算法优化代码代码 多目标快速非支配排序遗传算法优化代码代码 多目标快速非支配排序遗传算法优化代码代码 多目标快速非支配排序遗传算法...

    数据结构经典问题和算法分析

    分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 如果原问题可分割成k个子问题(1≤n),且这些子问题都可解,并可利用这些子问题的解求出原问题的解,...

    c++快速排序(quick-sort)

    c++快排(快速排序)的源代码。代码简洁明了。让您知道理解快排。 用一个函数解决快排问题。 请您赶快来下载吧!

    A*算法(Astar算法/A星算法)C++模板函数实现.zip

    这是A*算法的C++(MSVC)实现,利用了模板函数,有两个测试用例,一个是迷宫寻路,一个是求解八数码问题。 压缩包内包括: Astar.hpp //这是A*算法的模板函数实现 (还附送个快排算法 testMain_eightDigital.cpp //这...

    论文研究-一种三路划分快速排序的改进算法.pdf

    针对快速排序在某些特殊情况下如数据已有序或重复数据较多时效率较低的问题进行了研究, 对三路快速排序进行改进, 使快速排序在特殊情况下也能保持较好的效率。通过大量的数据测试发现, 该算法在最好情况下其性能在几...

    液压驱动无杆排采控制系统设计

    针对现有煤层气无杆排采设备控制精度和工作效率低,以及排采现场人员劳动强度大等问题,设计了一种液压驱动无杆泵,并基于PLC设计了液压驱动无杆排采控制系统。该系统采用井下压力计监测井底流压,通过PLC对流压实测值和...

    你必须知道的495个C语言问题(PDF)

    4.4 我有个函数,它应该接受并初始化一个指针void f(int *ip) f static int dummy = 5; ip = &dummy;g 但是当我如下调用时: int *ip; f(ip); 调用者的指针却没有任何变化。. . . . . . . . . . . . . . . 18 4.5 我...

    GE的排产软件 Proficy Robex

    Proficy 先进排产软件 引擎采用业界最先进的 优化引擎,高性能保证了可以灵活的针对生产情况做出最快的反应。生产排程人员从繁琐的计算中解放出来,从而关注更高的层面来帮助企业。通常运算时间必须取决于具体问题的...

    C 语言编程常见问题解答.chm

    9.6 可以把另外一个地址赋给一个数组名吗? 9.7 array_name和&array;_name有什么不同? 9.8 为什么用const说明的常量不能用来定义一个数组的初始大小? 9.9 字符串和数组有什么不同? 第10章 位(bit)和...

    互联网面试手写代码常见题总结.docx

    这道题目考察了排序算法的知识和编程能力,可以使用快排算法来解决问题。 8. 链表是否是循环的判断。 这道题目考察了链表的操作和判断循环的方法,可以使用快慢指针来判断链表是否是循环的。 9. 双向链表如何倒排...

    排放钻孔快速促排瓦斯合理深度研究

    针对伏岩煤业煤巷掘进局部施工的排放钻孔消突效果差,掘进时瓦斯超限严重、频繁等问题,结合现场应用分析认为排放钻孔深度是影响排放效果的关键因素,采用现场钻屑法演算了煤巷前方煤体应力和煤层透气性的变化规律,在此...

Global site tag (gtag.js) - Google Analytics