这是挖坑填补法的演示

快排之挖坑填补法:

  void Quick(int top/*起始位置*/,int end/*末尾位置*/,int arr[])//挖坑填补法
{
int i=top,j=end,mark;//i是记住前面的坑 j记住后面的坑 mark记住标准值 mark=arr[top];//以起始位置作为标准值,同时起始点成为第一个坑
if(top>=end)return;
while(i<j)
{
while(i<j)//从后向前找比标准值小的值并且把这个值赋予坑,此点成为新的坑
{
if(arr[j]<mark)
{
arr[i]=arr[j]; i++;//前面的坑向后移动一位开始找
break;
}
j--;
}
while(i<j)//从前向后找比标准值大的值并且把这个值赋予坑此点成为新的坑 {
if(arr[i]>mark)
{
arr[j]=arr[i];
j--;//后面的坑向前移动一位开始找 break;
}
i++;
} }
arr[j]=mark;//此时的下标就是标记值的最终位置,他的前面都比他小后面都比他大
Quick(top,i-,arr);//递归
Quick(j+,end,arr);
}

快排之区间分割法:

int sch_sect(int arr[],int j,int top)//区间分割法
{
int s=j+;
while(j>)
{
if(arr[j]>arr[top])//arr[top]就是标准值
{
if(j!=--s)//判断是否指向一个位置,(因为指向一个位置异或符号会使结果为0)
{
arr[j]=arr[j]^arr[s];
arr[s]=arr[s]^arr[j];
arr[j]=arr[s]^arr[j];
} }
j--;
}
s--;
arr[top]=arr[s];//现将最终点的值赋予标准点,函数结束后将标准点的值赋予最终点
return s;
}
void Quick(int top/*起始位置*/,int end/*末尾位置*/,int arr[])
{
int i=top,j=end,mark;//i是记住前面的坑 j记住后面的坑 mark记住坑的值 mark=arr[top];//以起始位置作为坑
if(top>=end)return;
i=sch_sect(arr,end,top);
j=i;
arr[j]=mark;//此时的下标就是标记值的最终位置,他的前面都比他小后面都比他大
Quick(top,i-,arr);//递归
Quick(j+,end,arr);
}

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

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

排序名称    最好时间复杂    平均时间复杂度度    最坏时间复杂度    空间复杂度    是否稳定
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. 剑指offer系列36----二叉搜索树的第k个节点

    [题目]给定一颗二叉搜索树,请找出其中的第k大的结点. * 例如, 5 * / \ * 3 7 * / \ / \ * 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 中序遍历:2 3 4 ...

  2. (转)ORACLE触发器详解

    本文转载自:http://blog.csdn.net/indexman/article/details/8023740/ ORACLE PL/SQL编程之八: 把触发器说透 本篇主要内容如下: 8.1 ...

  3. gdb: multiple process debug

    gdbserver自身不支持multiple process:如果你调试parent process时在子进程上下断点,子进程在运行到那个断点时就会SIGTRAP. 如果你要调试fork出来的子进程: ...

  4. Python函数,参数,变量

    func1.py def sayHello(): print ('hello world') sayHello() func_parm.py def printMax(a,b): if a>b: ...

  5. jQuery formValidator手册

    什么是jQuery formValidator? jQuery formValidator表单验证插件是客户端表单验证插件. 在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人 ...

  6. (C#) 发布程序,包含某些配置文件或数据文件。

    在VS2012里面,右击需要发布的Project,选择“Properties“, 在弹出的窗口里面点选”Publish“, 再点击”Application Files“, 将默认的Publish St ...

  7. 单选按钮选中js的处理

    function FinancialinfosetController($scope, $http, $timeout, $location, $rootScope, $routeParams) { ...

  8. PLSQL_性能优化系列04_Oracle Optimizer优化器

    2014-09-25 Created By BaoXinjian

  9. Shell_Oracle Erp基于主机文件Host开发详解(案例)

    2014-06-20 Created By BaoXinjian

  10. winform窗体的关闭与资源的释放

    单纯的this.Dispose(); this.Close();有时候并不能释放出所用资源.因为Dispose()方法,虽然能释放当前窗体的资源,却不能强制结束循环,  要想强制突出当前程序要用:Sy ...