java-数据结构——快速排序
2016-12-05 15:41
232 查看
public static int partition(int []array,int lo,int hi){
//固定的切分方式
int key=array[lo];
while(lo<hi){
while(array[hi]>=key&&hi>lo){//从后半部分向前扫描
hi--;
}
array[lo]=array[hi];
while(array[lo]<=key&&hi>lo){从前半部分向后扫描
lo++;
}
array[hi]=array[lo];
}
array[hi]=key;
return hi;
}
public static void sort(int[] array,int lo ,int hi){
if(lo>=hi){
return ;
}
int index=partition(array,lo,hi);
sort(array,lo,index-1);
sort(array,index+1,hi);
}
快速排序的时间复杂度为O(NlogN)
对于基准位置的选取一般有三种方法:固定切分,随机切分和三取样切分。固定切分的效率并不是太好,随机切分是常用的一种切分,效率比较高,最坏情况下时间复杂度有可能为O(N2).对于三数取中选择基准点是最理想的一种
public static int partition(int []array,int lo,int hi){
//固定的切分方式
int key=array[lo];
while(lo<hi){
while(array[hi]>=key&&hi>lo){//从后半部分向前扫描
hi--;
}
array[lo]=array[hi];
while(array[lo]<=key&&hi>lo){从前半部分向后扫描
lo++;
}
array[hi]=array[lo];
}
array[hi]=key;
return hi;
}
public static void sort(int[] array,int lo ,int hi){
if(lo>=hi){
return ;
}
int index=partition(array,lo,hi);
sort(array,lo,index-1);
sort(array,index+1,hi);
}
快速排序的时间复杂度为O(NlogN)
对于基准位置的选取一般有三种方法:固定切分,随机切分和三取样切分。固定切分的效率并不是太好,随机切分是常用的一种切分,效率比较高,最坏情况下时间复杂度有可能为O(N2).对于三数取中选择基准点是最理想的一种
相关文章推荐
- c++ 数据结构 链式队列
- c++ 数据结构 循环队列
- AVL树及关于插入的说明
- Java数据结构和算法-栈和队列(1-前言+栈)
- 栈
- sparse matrix(稀疏矩阵)
- perl 监控数据库用到的数据结构
- perl 监控数据库用到的数据结构
- 从尾到头打印链表
- 数组旋转
- 数据结构之Trie树
- 数据结构存储,顺序和链式比较d
- 数据结构实验之查找一:二叉排序树
- 常见数据结构与算法整理总结(上)
- 使用LinkedList来模拟一个堆栈或者队列数据结构
- 数据结构整理
- 计算机图形学中的Mesh数据结构
- 数据结构八大排序算法
- 数据结构笔记--1.1.3关于算法效率 计算多项式值
- Java数据结构和算法-简单排序(4-对象排序及几种排序的比较)