这是挖坑填补法的演示

快排之挖坑填补法:

  1. void Quick(int top/*起始位置*/,int end/*末尾位置*/,int arr[])//挖坑填补法
  2. {
  3. int i=top,j=end,mark;//i是记住前面的坑 j记住后面的坑 mark记住标准值
  4.  
  5. mark=arr[top];//以起始位置作为标准值,同时起始点成为第一个坑
  6. if(top>=end)return;
  7. while(i<j)
  8. {
  9. while(i<j)//从后向前找比标准值小的值并且把这个值赋予坑,此点成为新的坑
  10. {
  11. if(arr[j]<mark)
  12. {
  13. arr[i]=arr[j];
  14.  
  15. i++;//前面的坑向后移动一位开始找
  16. break;
  17. }
  18. j--;
  19. }
  20. while(i<j)//从前向后找比标准值大的值并且把这个值赋予坑此点成为新的坑
  21.  
  22. {
  23. if(arr[i]>mark)
  24. {
  25. arr[j]=arr[i];
  26. j--;//后面的坑向前移动一位开始找
  27.  
  28. break;
  29. }
  30. i++;
  31. }
  32.  
  33. }
  34. arr[j]=mark;//此时的下标就是标记值的最终位置,他的前面都比他小后面都比他大
  35. Quick(top,i-,arr);//递归
  36. Quick(j+,end,arr);
  37. }

快排之区间分割法:

  1. int sch_sect(int arr[],int j,int top)//区间分割法
  2. {
  3. int s=j+;
  4. while(j>)
  5. {
  6. if(arr[j]>arr[top])//arr[top]就是标准值
  7. {
  8. if(j!=--s)//判断是否指向一个位置,(因为指向一个位置异或符号会使结果为0)
  9. {
  10. arr[j]=arr[j]^arr[s];
  11. arr[s]=arr[s]^arr[j];
  12. arr[j]=arr[s]^arr[j];
  13. }
  14.  
  15. }
  16. j--;
  17. }
  18. s--;
  19. arr[top]=arr[s];//现将最终点的值赋予标准点,函数结束后将标准点的值赋予最终点
  20. return s;
  21. }
  22. void Quick(int top/*起始位置*/,int end/*末尾位置*/,int arr[])
  23. {
  24. int i=top,j=end,mark;//i是记住前面的坑 j记住后面的坑 mark记住坑的值
  25.  
  26. mark=arr[top];//以起始位置作为坑
  27. if(top>=end)return;
  28. i=sch_sect(arr,end,top);
  29. j=i;
  30. arr[j]=mark;//此时的下标就是标记值的最终位置,他的前面都比他小后面都比他大
  31. Quick(top,i-,arr);//递归
  32. Quick(j+,end,arr);
  33. }

快排是比较最少的一种排序方法

如果数组数量过少的时候直接使用插入排序而不选择快排

排序名称    最好时间复杂    平均时间复杂度度    最坏时间复杂度    空间复杂度    是否稳定
Quick        O(n*log2n)          O(n*log2n)           O(n^2)              log2n        不稳定

Quick Sort(快排)的更多相关文章

  1. HDU1425 <sort 快排>

    给你n个整数,请按从大到小的顺序输出其中前m大的数. 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,5000 ...

  2. sort 快排解决百万级的排序

    问题:给n个整数,按从大到小的顺序,输出前m大的整数0<m,n<1000000,每个整数[-500000,500000]输入:5 33 -35 92 213 -644输出:213 92 3 ...

  3. 函数模拟sort快排

    设计一个对一维数组进行排序的sort函数,并调用它实现数组排序 思路:函数调用不止调用一个,最主要对函数不熟悉: #include<stdio.h> #define N 10 int ma ...

  4. java链表实现快排

    链表文件 package sort; public class SqList {    public int LIST_INIT_SIZE = 8;//链表的原始大小    private int I ...

  5. 结构体快排回顾(sort)

    一般来说,我做竞赛的时候排序一般用快排 很快很方便 普通sort(从小到大) sort(a,a+n); 直接贴一段代码吧,包含了vector,sort,结构体等简单东西综合 #include < ...

  6. JavaScript快排与原生sort的测试

    今天工作室断网!果断回宿舍,不然各种资料都没有.(他说将来会找到!)不好意思,又哼起来了.进入主题,大家都知道,快排是各种排序算法中,最高效的也是应用最广的,还有更重要的一点,面试特别爱考的! 其实大 ...

  7. 阮一峰大神的快排?刚才还在纠结sort()的我!真是个小傻瓜

    看到这个标题之后 我毫不犹豫的点进去了 趁现在不忙我赶紧把代码写到了我的小本本上好好研究研究 (写的就不放进来了 有点丑) 研究了下  第一反应 明明能用sort()解决的 为什么非要写这么一大串 但 ...

  8. 待字闺中之快排单向链表;leetcode之Sort List

    题目来源.待字闺中.原创@陈利人 .欢迎大家继续关注微信公众账号"待字闺中" 分析:思路和数据的高速排序一样,都须要找到一个pivot元素.或者节点. 然后将数组或者单向链表划分为 ...

  9. hdu 1425:sort(排序,经典题。快排模板)

    sort Time Limit : 6000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissi ...

随机推荐

  1. java ScriptEngine 使用 (支持JavaScript脚本,eval()函数等)

    Java SE 6最引人注目的新功能之一就是内嵌了脚本支持.在默认情况下,Java SE 6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript.在Java SE ...

  2. POJ 1410 Intersection(计算几何)

    题目大意:题目意思很简单,就是说有一个矩阵是实心的,给出一条线段,问线段和矩阵是否相交解题思路:用到了线段与线段是否交叉,然后再判断线段是否在矩阵里面,这里要注意的是,他给出的矩阵的坐标明显不是左上和 ...

  3. POJ 4047 Garden 线段树 区间更新

    给出一个n个元素的序列,序列有正数也有负数 支持3个操作: p x y 0.p=0时,把第x个的值改为y 1.p=1时,交换第x个和第y个的值 2.p=2时,问区间[x,y]里面连续k个的子序列的最大 ...

  4. NeHe OpenGL教程 第二十四课:扩展

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. poj 3040 Allowance

    Allowance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1842   Accepted: 763 Descript ...

  6. mapreduce执行流程

    角色描述:JobClient:执行任务的客户端JobTracker:任务调度器TaskTracker:任务跟踪器Task:具体的任务(Map OR Reduce) 从生命周期的角度来看,mapredu ...

  7. mat(Eclipse Memory Analyzer tool)之二--heap dump分析

    文章中的shallow.retained关键字的说明见:GC是如何回收时的判断依据.shallow size.retained size 在本文中,将介绍MAT(Eclipse Memory Anal ...

  8. Gradle学习

    Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言.近期,Gradle获得了极大的关注,这也是我决定去研究Gradle的原因. 这篇文章是 ...

  9. google protobuf 简单实例

    1.定义proto文件: User.proto package netty; option java_package="myprotobuf"; option java_outer ...

  10. java多线程的使用2

    1.join与interrupt的用法 class Sleeper extends Thread { private int duration; public Sleeper(String name, ...