Quick Sort(快排)

这是挖坑填补法的演示
快排之挖坑填补法:
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 Sort(快排)的更多相关文章
- HDU1425 <sort 快排>
给你n个整数,请按从大到小的顺序输出其中前m大的数. 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,5000 ...
- sort 快排解决百万级的排序
问题:给n个整数,按从大到小的顺序,输出前m大的整数0<m,n<1000000,每个整数[-500000,500000]输入:5 33 -35 92 213 -644输出:213 92 3 ...
- 函数模拟sort快排
设计一个对一维数组进行排序的sort函数,并调用它实现数组排序 思路:函数调用不止调用一个,最主要对函数不熟悉: #include<stdio.h> #define N 10 int ma ...
- java链表实现快排
链表文件 package sort; public class SqList { public int LIST_INIT_SIZE = 8;//链表的原始大小 private int I ...
- 结构体快排回顾(sort)
一般来说,我做竞赛的时候排序一般用快排 很快很方便 普通sort(从小到大) sort(a,a+n); 直接贴一段代码吧,包含了vector,sort,结构体等简单东西综合 #include < ...
- JavaScript快排与原生sort的测试
今天工作室断网!果断回宿舍,不然各种资料都没有.(他说将来会找到!)不好意思,又哼起来了.进入主题,大家都知道,快排是各种排序算法中,最高效的也是应用最广的,还有更重要的一点,面试特别爱考的! 其实大 ...
- 阮一峰大神的快排?刚才还在纠结sort()的我!真是个小傻瓜
看到这个标题之后 我毫不犹豫的点进去了 趁现在不忙我赶紧把代码写到了我的小本本上好好研究研究 (写的就不放进来了 有点丑) 研究了下 第一反应 明明能用sort()解决的 为什么非要写这么一大串 但 ...
- 待字闺中之快排单向链表;leetcode之Sort List
题目来源.待字闺中.原创@陈利人 .欢迎大家继续关注微信公众账号"待字闺中" 分析:思路和数据的高速排序一样,都须要找到一个pivot元素.或者节点. 然后将数组或者单向链表划分为 ...
- hdu 1425:sort(排序,经典题。快排模板)
sort Time Limit : 6000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissi ...
随机推荐
- python之pexpect模块
最近在看<Python自动化运维技术与最佳实战>这本书,学到了一个运维中用到的模块:pexpect 下面是其定义: Pexpect 是一个用来启动子程序并对其进行自动控制的 Python ...
- Python 正则表达式-OK
Python正则表达式入门 一. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上 ...
- 【WEB】原理 之 线程池
问题描述:我们获取连接超过连接池最大值时产生如上异常.通常连接池最大值为100.当我们获取连接超过最大值时,WEB等待连接池返回连接而超时,这样将抛出如上异常解决办法:首先要做的是在我们使用连接后立即 ...
- 嵌入式jetty
一.maven依赖 pom配置 <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId&g ...
- OAF_VO系列3 - Binding Style绑定方式
在OAF VO开发中,Binding Style主要用于对VO的where clause做动态传值,总共有三种方式 1. Oracle Named 2. Oracle Posi ...
- cf111D Petya and Coloring 组合数学,二项式反演
http://codeforces.com/contest/111/problem/D Little Petya loves counting. He wants to count the numbe ...
- DataGridView操作
C# DataGridView控件动态添加新行 DataGridView控件在实际应用中非常实用,特别需要表格显示数据时.可以静态绑定数据源,这样就自动为DataGridView控件添加相应的行.假如 ...
- C++14使用std::integer_sequence展开tuple作为函数的参数
元组是一种长度固定的允许有不同类型元素的集合,根据元素的个数不同又分别称作一元组.二元组.三元组等.C++11中标准库增加了一个叫std::tuple的类模板,用于表示元组. 下面的代码演示了使用C+ ...
- 使用mysql函数 group_concat 一点需要注意的
这个函数是一个非常好用的函数,比如我们可以在 进行多对多关联表,进行批量查询的时候可以用到, 比如学生和老师是多对多的关系,如果我们希望查询 指定的一些老师对应的学生有哪些 的时候,一般的情况,我们可 ...
- 表空间、Schema和用户
源地址:http://www.cnblogs.com/kevinanni/p/3688921.html