这是挖坑填补法的演示

快排之挖坑填补法:

  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. read,for,case,while,if简单例子

    Read多用于从某文件中取出每行进行处理 $ cat read.sh #!/bin/bash echo "using read" cat name.txt | while read ...

  2. golang的ssh例子

    package main import ( "github.com/dynport/gossh" "log" ) func MakeLogger(prefix ...

  3. MySQL运行出错:无法连接驱动、无root访问权限解决办法

    按照疯狂java讲义的13.3的程序,发现程序运行出错. 1.点开runConnMySql.cmd运行文件,出现如下结果: 2.用Editplus进行编译运行,如下结果: 报错定位到程序第18行,而第 ...

  4. 在Linux中使用VS Code编译调试C++项目

    最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...

  5. Exception error message with incorrect line number

    In Release mode the number in front of the exception is NOT the line of code. Instead it's an offset ...

  6. Python中split()函数的用法及实际使用示例

    Python中split()函数,通常用于将字符串切片并转换为列表. 一.函数说明: split():语法:str.split(str="",num=string.count(st ...

  7. 3.函数Function

    所谓函数,本质上是一种代码的分组形式.我们可以通过这种形式赋予某组代码一个名字,便于日后重用是调用. function sum(a,b){ var c = a+b; return c; } 1.一个函 ...

  8. 树莓派安装3.5inch RPi LCD (A)显示屏

    3.5inch RPi LCD (A) 资料 产品介绍 用户手册 开发资料 开发软件 树莓派镜像 演示视频 FAQ 在自定义Raspbian系统镜像上怎么使用树莓派LCD? 先确保自定义镜像可正常进入 ...

  9. jQuery如何动态添加具有删除按钮的行

    代码实例如下: <!DOCTYPE html><html><head><meta charset=" utf-8"><meta ...

  10. UIView阴影和圆角的关系

    UIView阴影和圆角的关系   UIView 的 clipsToBounds属性和CALayer的setMasksToBounds属性表达的意思是一致的. 取值:BOOL(YES/NO) 作用:决定 ...