三向切分的快速排序和優化
-
public class Sort{
-
public static void main(String[] args){
-
Integer[] data={100,20,21,28,22,26,80,33,3,2,9,8,7,10,77,66,99,96,91,94};
-
BaseSort s=new Quick3Way(data);
-
-
s.show(data);
-
-
System.out.println(s.isSorted(data));
-
}
-
}
-
-
-
-
class Quick3Way extends BaseSort{
-
public Quick3Way(Comparable[] data){
-
sort(data,0,data.length-1);
-
}
-
-
@Override
-
void sort(Comparable[] data, int lo, int hi) {
-
if(hi<=lo){
-
return;
-
}
-
int lt=lo,i=lo+1,gt=hi;
-
Comparable v=data[lo];
-
while(i<=gt){
-
int cmp=data[i].compareTo(v);
-
if(cmp<0) {
-
exch(data, lt++, i++);
-
}else if(cmp>0){
-
exch(data,i,gt--);
-
}else{
-
i++;
-
}
-
}
-
sort(data,lo,lt-1);
-
sort(data,gt+1,hi);
-
}
-
}
-
abstract class BaseSort {
-
abstract void sort(Comparable[] data,int lo,int hi);
-
-
//比較
-
public boolean less(Comparable v,Comparable w){
-
return v.compareTo(w)<0;
-
}
-
-
//列印
-
public void show(Comparable[] data){
-
for(int i=0;i<data.length;i++){
-
System.out.print(data[i]+" ");
-
}
-
System.out.println("");
-
}
-
-
//驗證
-
public boolean isSorted(Comparable[] data){
-
for(int i=1;i< data.length;i++){
-
if(less(data[i],data[i-1]) )
-
return false;
-
}
-
return true;
-
}
-
-
//交換
-
public void exch(Comparable[] data,int i,int j){
-
Comparable t=data[i];
-
data[i]=data[j];
-
data[j]=t;
-
}
- }
if(hi<=lo){ return; }小陣列可以改為插入排序。
int M=5; if(hi<=lo+M){ Insertion.sort(data,lo,hi); return; }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2125329/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 快速排序及其優化排序優化
- 快速排序及優化排序優化
- 三種快速排序演算法以及快速排序的優化排序演算法優化
- MySQL垂直切分和水平切分概念和優缺點介紹MySql
- Mysql優化_ORDER BY和GROUP BY 的優化講解(單路排序和雙路排序)MySql優化排序
- 八大排序演算法(2)_快速排序的優化排序演算法優化
- 快速排序的效能和名字一樣優秀排序
- 快速排序--洛谷卡TLE後最終我還是選擇了三向切割排序
- 資料結構:快速排序程式碼(已優化)資料結構排序優化
- 選擇排序和快速排序排序
- 冒泡和快速排序排序
- Orderby 排序優化排序優化
- 外部排序優化排序優化
- 堆排序和快速排序效能比較排序
- MySQL 5.7 ORDER BY排序的優化MySql排序優化
- [Hive]Hive排序優化Hive排序優化
- oracle sql 排序優化OracleSQL排序優化
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 歸併和快速排序思想的延伸排序
- Go實現氣泡排序和快速排序Go排序
- 一次快速排序引發的jvm調優排序JVM
- 插入排序以及優化排序優化
- 如何優化氣泡排序?優化排序
- 氣泡排序及優化排序優化
- 用php如何快速將字串切分成陣列PHP字串陣列
- 高效的SQL(index range scan優化排序)SQLIndex優化排序
- 排序之快速排序排序
- 【JS面試向】選擇排序、桶排序、氣泡排序和快速排序簡介JS面試排序
- 排序:氣泡排序&快速排序排序
- SQL優化之利用索引排序SQL優化索引排序
- 圖形化排序演算法比較:快速排序、插入排序、選擇排序、氣泡排序排序演算法
- 快速排序排序
- Python 效能快速優化Python優化
- group by排序,derived_merge優化的坑排序優化
- 【分治演算法】歸併排序,快速排序和漢諾塔演算法排序
- 快速排序&&歸併排序排序
- 一看就懂的氣泡排序和【3】步深度優化法排序優化
- 快速排序的實現排序