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 ...
随机推荐
- java ScriptEngine 使用 (支持JavaScript脚本,eval()函数等)
Java SE 6最引人注目的新功能之一就是内嵌了脚本支持.在默认情况下,Java SE 6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript.在Java SE ...
- POJ 1410 Intersection(计算几何)
题目大意:题目意思很简单,就是说有一个矩阵是实心的,给出一条线段,问线段和矩阵是否相交解题思路:用到了线段与线段是否交叉,然后再判断线段是否在矩阵里面,这里要注意的是,他给出的矩阵的坐标明显不是左上和 ...
- POJ 4047 Garden 线段树 区间更新
给出一个n个元素的序列,序列有正数也有负数 支持3个操作: p x y 0.p=0时,把第x个的值改为y 1.p=1时,交换第x个和第y个的值 2.p=2时,问区间[x,y]里面连续k个的子序列的最大 ...
- NeHe OpenGL教程 第二十四课:扩展
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- poj 3040 Allowance
Allowance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1842 Accepted: 763 Descript ...
- mapreduce执行流程
角色描述:JobClient:执行任务的客户端JobTracker:任务调度器TaskTracker:任务跟踪器Task:具体的任务(Map OR Reduce) 从生命周期的角度来看,mapredu ...
- mat(Eclipse Memory Analyzer tool)之二--heap dump分析
文章中的shallow.retained关键字的说明见:GC是如何回收时的判断依据.shallow size.retained size 在本文中,将介绍MAT(Eclipse Memory Anal ...
- Gradle学习
Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言.近期,Gradle获得了极大的关注,这也是我决定去研究Gradle的原因. 这篇文章是 ...
- google protobuf 简单实例
1.定义proto文件: User.proto package netty; option java_package="myprotobuf"; option java_outer ...
- java多线程的使用2
1.join与interrupt的用法 class Sleeper extends Thread { private int duration; public Sleeper(String name, ...