三向切分的快速排序
来源:互联网 发布:塞尔维亚 知乎 编辑:程序博客网 时间:2024/04/29 10:42
对于存在大量重复元素的数组,这种方法比标准的快速排序的效率高得多。
#include<iostream>using namespace std;int partition(int a[],int lo,int hi){ int i=lo,j=hi+1; int v=a[lo]; while(true){ while(a[++i]<v)if(i==hi)break; while(v<a[--j])if(j==lo)break; if(i>=j)break; int temp=a[i]; a[i]=a[j]; a[j]=temp; } int temp=a[lo]; a[lo]=a[j]; a[j]=temp; return j;}void sort(int a[],int lo,int hi){ if(hi<=lo) return; int j=partition(a,lo,hi); sort(a,lo,j-1); sort(a,j+1,hi);}void quick3way(int a[],int lo,int hi){ if(hi<=lo)return; int lt=lo,i=lo+1,gt=hi; int v=a[lo]; while(i<=gt){ int temp; if(a[i]>v){ temp=a[i]; a[i]=a[gt]; a[gt]=temp; gt--; } else if(a[i]<v){ temp=a[lt]; a[lt]=a[i]; a[i]=temp; lt++; i++; } else if(a[i]=v) i++; } sort(a,lo,lt-1); sort(a,gt+1,hi);}int main(){ int a[5]={5,3,4,1,2}; quick3way(a,0,4); for(int i=0;i<5;i++) cout<<a[i]; cout<<endl; return 0;}
0 0
- 三向切分的快速排序
- 三向切分的快速排序
- 三向切分的快速排序
- 三向切分快速排序
- 三向切分快速排序
- java快速排序和三向切分的快速排序
- 排序笔记_6(三向切分的快速排序)
- 图示经典算法--三向切分的快速排序
- 快速排序之三向切分
- 快速排序-三向切分(java实现)
- 《算法》希尔排序、归并排序、快速排序、三向切分的快速排序
- 快速排序及三向切分快速排序
- 快速排序及优化算法(三向切分的快速排序)
- [算法之排序]三向切分的快速排序算法(java实现)
- 排序-快速排序-优化-使用三向切分(优化重复元素的情况
- 算法#11--用简单的思维理解归并排序和三向切分快速排序
- 【算法理解】—— 快速排序(三向切分)
- 单链表的快速排序与三向切分数组快排
- Android-软键盘弹出和隐藏
- Android使用ViewPager实现左右循环滑动及轮播效果
- MP4文件格式的解析
- python将txt转换为csv
- 全文检索的基本原理之Lucene原理篇
- 三向切分的快速排序
- 一步步优化JVM<三>:GC优化基础
- PHP的json_encode函数应用到微信接口问题(include \uxxxx will create fail)
- [leetcode-25]Reverse Nodes in k-Group(C)
- http://blog.sina.com.cn/s/blog_4c0e8aa20100ung8.html
- Android 简易文件选择Dialog
- Android Studio 里面 导入SlidingMenu
- 网络远程教育实施方案交流之(三)——服务器架构及视频存储方案
- 数据仓库基础知识~