一.Partiton算法

Partiton算法的主要内容就是随机选出一个数,将这个数作为中间数,将大于它的排在它右边,小于的排在左边(无序的)。

 int partition (int arr[],int start,int end)  //传入一个数组和要进行partition的范围
{ int pivot = arr[start]; // 将第一个数做为中间数 while( start < end ){ while (start<end&&arr[end]>=pivot) //从右边开始寻找,找到第一个小于中间数的数
end--;
arr[start]=arr[end];//找到后往最左边的位置放
while (start<end&&arr[start]<=pivot) //同理,从最左边开始寻找,找到第一个大于中间数的数,往右边放
start++;
arr[end]=arr[start];//因为end的位置是之前第n个比中间数小的数,并且已经放在了靠左的位置,所以此时可以将比中间数大的数往end填
}
arr[start]=pivot;
return start; //返回中间值的下标
}

二.利用Partition进行快排

基本原理就是把某个范围一直缩小并且一直Partition.

为了直观直接拿出一个数组进行排序。(可直接运行观察结果)

 #include<bits/stdc++.h>

 using namespace std;

 int num[]={,,,,,,,,};

 int partition (int arr[],int start,int end)  //[start,end]
{ int pivot = arr[start]; while( start < end ){ while (start<end&&arr[end]>=pivot)
end--;
arr[start]=arr[end];
while (start<end&&arr[start]<=pivot)
start++;
arr[end]=arr[start];
}
arr[start]=pivot;
return start;
} void sort(int arr[],int l,int r){ //将[l,r]范围内进行排序
int mid = partition(num,l,r); //在该范围进行一次partition,得到中间值的下标mid,可知此时mid对应的数以左的数比它小,以右的数比它大
if(mid>l)sort(arr,l,mid-); //[l---mid--------------------r] 当mid大于范围的最小下标时,将[l,mid-1]范围内进行一次partition
if(mid<r)sort(arr,mid+,r); //同理,当mid小于范围的最大下标时,将[mid+1,r]范围内进行一次partition
} //分到最后每个数的左边的数都比它本身小,右边的数都比它本身的大,也就完成了从小到大的排序。 int main ( int argc, const char * argv[])
{
sort(num,,);
for(int i=;i<;i++)
cout<<num[i]<<" ";
return ;
}

为了防止忘记写下这篇博客,毕竟partition算法是很常用的一种算法,并且不止一种方法,目前就只记这种比较好理解的了。

回忆Partition算法及利用Partition进行快排的更多相关文章

  1. Java实现的各种排序算法(包括冒泡,快排等)

    //堆排序 不稳定 import java.util.Arrays; public class HeapSort { public static void main(String[] args) { ...

  2. python之排序算法-冒泡、选排、快排

    影响内排序算法性能的三个因素: 时间复杂度:即时间性能,高效率的排序算法应该是具有尽可能少的关键字比较次数和记录的移动次数 空间复杂度:主要是执行算法所需要的辅助空间,越少越好. 算法复杂性.主要是指 ...

  3. iOS常见算法(二分法 冒泡 选择 快排)

    二分法: 平均时间复杂度:O(log2n) int halfFuntion(int a[], int length, int number)  { int start = 0; int end = l ...

  4. Java排序算法 [选择、冒泡、快排]

    选择排序: 简述:从数组的第一个元素开始,依次与其他所有的元素对比,如果比自身大或小(取决于升序或降序)交换位置. package com.sort; import java.util.Arrays; ...

  5. Partition算法剖析

    博文链接:http://haoyuanliu.github.io/2016/12/18/Partition%E7%AE%97%E6%B3%95%E5%89%96%E6%9E%90/ 对,我是来骗访问量 ...

  6. Partition算法以及其应用详解上(Golang实现)

    最近像在看闲书一样在看一本<啊哈!算法> 当时在amazon上面闲逛挑书,看到巨多人推荐这本算法书,说深入浅出简单易懂便买来阅读.实际上作者描述算法的能力的确令人佩服.就当复习常用算法吧. ...

  7. 荷兰国旗问题、快排以及BFPRT算法

    荷兰国旗问题 给定一个数组arr,和一个数num,请把小于num的数放数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边.要求额外空间复杂度O(1),时间复杂度O(N). 这个问题 ...

  8. 利用快排partition求前N小的元素

    求前k小的数,一般人的想法就是先排序,然后再遍历,但是题目只是求前N小,没有必要完全排序,所以可以想到部分排序,而能够部分排序的排序算法我能想到的就是堆排序和快排了. 第一种思路,局部堆排序. 首先, ...

  9. BFPRT 算法 (TOP-K 问题)——本质就是在利用分组中位数的中位数来找到较快排更合适的pivot元素

    先说快排最坏情况下的时间复杂度为n^2. 正常情况:   最坏的情况下,待排序的记录序列正序或逆序,每次划分只能得到一个比上一次划分少一个记录的子序列,(另一个子序列为空).此时,必须经过n-1次递归 ...

随机推荐

  1. LeetCode - Maximum Frequency Stack

    Implement FreqStack, a class which simulates the operation of a stack-like data structure. FreqStack ...

  2. Discuz! X3 全新安装图文教程

    Discuz! 是腾讯旗下 Comsenz 公司推出的以社区为基础的专业建站平台,帮助网站实现一站式服务.让论坛(BBS).个人空间(SNS).门户(Portal).群组(Group).应用开放平台( ...

  3. spring redis 注解实现缓存机制

    1.xml配置 <bean id="poolConfigTax" class="redis.clients.jedis.JedisPoolConfig"& ...

  4. tomcat访问错误调试方法

    生产环境中经常用到tomcat,所以还是要学一下tomcat的排错的 很重要的一点,就是实时查看catalina.out日志 执行tail -f catalina.out就会实时刷新日志了 catal ...

  5. mysql下载以及安装

    因为xampp怎么都连接不上mysql,我感觉有可能是因为装mysql的时候试了很多次才安装成功,之前的mysql没有卸载干净造成的,今天把mysql卸载干净,又重新安装配置环境,但是还是连接不上,然 ...

  6. Spring Cloud(Dalston.SR5)--Zuul 网关-路由配置

    Spring Cloud 在 Zuul 的 routing 阶段实现了几个过滤器,这些过滤器决定如何进行路由工作. 简单路由(SimpleHostRoutingFilter) 该过滤器运行后,会将 H ...

  7. Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...

  8. 【浅色】最强Win7 x64评测

    [浅色]最强Win7 x64评测 [浅色]最强Win7 x86 & x64 | WINOS https://www.winos.me/archives/789.htmlESD671MB,安装后 ...

  9. kafka consumer防止数据丢失(转)

    http://kane-xie.iteye.com/blog/2225085 kafka最初是被LinkedIn设计用来处理log的分布式消息系统,因此它的着眼点不在数据的安全性(log偶尔丢几条无所 ...

  10. 七、XHTML介绍

    XHTML简介 1.什么是XHTML? XHTML指的是可扩展超文本标记语言 XHTML与HTML4.01几乎是相同的 XHTML是更严格更纯净的HTML版本 XHTML得到所有主流浏览器的支持 2. ...