java:快速排序演算法與氣泡排序演算法
Java:快速排序演算法與冒泡演算法
首先看下,氣泡排序演算法與快速排序演算法的效率:
如下的是main方法:
/**
*
* @Description:
* @author:cuiyaonan2000@163.com
* @date 2014年11月5日 下午1:02:10
*/
public static void main(String[] args) {
//快速排序演算法測試
int[] qArray = new int[100000];
for (int i = 0; i < 100000; i++){
qArray[i] = (int) (Math.random() * 100000);
}
long beforeQ = System.currentTimeMillis();
quickSort(qArray, 0, qArray.length-1);
System.out.println("快速排序執行時間:" + (System.currentTimeMillis() - beforeQ));
//氣泡排序演算法測試
int[] bArray = new int[100000];
for (int i = 0; i < 100000; i++){
bArray[i] = (int) (Math.random() * 100000);
}
long beforeB = System.currentTimeMillis();
bubble(bArray);
System.out.println("氣泡排序執行時間:" + (System.currentTimeMillis() - beforeB));
}
在一個有100000 個數字的陣列中排序結果如下:
如下的是大家耳熟能詳的冒泡演算法(關於冒泡就不多說了):
/**
*
* @Description:
* @author:cuiyaonan2000@163.com
* @date 2014年11月5日 下午1:00:32
*/
public static void bubble(int[] data) {
for (int i = 0; i < data.length - 1; i++) {
for (int j = i + 1; j < data.length; j++)
if (data[i] > data[j]) {
int temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}
}
先說下關於快速排序演算法的思路:
-
選取陣列第一個數字,作為key.並設定變數i為0,j為陣列長度.
-
從陣列最後一位開始向前找,找什麼呢?找比key小的數字(不能等於),並記錄下座標j.限制條件是,在向前找的過程中如果一直沒找到比key小的數值,就在i<j的時候停止(如果沒有找到j就做減一操作繼續找).如果找到了就將陣列[j]與陣列[i]的值對換並結束.
-
從陣列第一位開始向後找,找什麼呢?找比key大的數字(不能等於),並記錄下座標i.限制條件是,在向前找的過程中如果一直沒找到比key大的數值,就在i<j的時候停止(如果沒有找到i就做加一操作繼續找).如果找到了就將陣列[j]與陣列[i]的值對換並結束.
-
完成如上的操作,列印輸出陣列發現:資料變得相對有序了,就是在陣列中key值座標前面的都是小於key的,key值座標後面的都是大於key值得,
-
所以大家明白了:將以key值為座標的陣列拆分成2個陣列,分別去執行123步驟操作,最終就會產生一個有序陣列
演算法如下
/**
*
* @Description:
* @author:cuiyaonan2000@163.com
* @date 2014年11月5日 下午1:02:45
*/
public static void quickSort(int[] array,int begin,int end){
int theKey = array[begin]; //設定關鍵值
int i = begin;
int j = end;
while(true){
while(i<j && array[j] >= theKey) //從後面找到一個比關鍵之小的數字座標
j-- ;
if(i<j){ //交換
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}else{
break;
}
while(i<j && array[i] <= theKey) //從前面找到一個比關鍵之大的數字座標
i++;
if(i<j){ //交換
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}else{
break;
}
}
if(--i > begin ){//這個表示一直找到 被拆分的陣列中只有一個值.否則遞迴呼叫
quickSort(array,begin,i);
}
if(++j< end){ //這個表示一直找到 被拆分的陣列中只有一個值.否則遞迴呼叫
quickSort(array,j,end);
}
}
相關文章
- Java排序演算法之氣泡排序Java排序演算法
- 排序演算法--氣泡排序排序演算法
- 排序演算法__氣泡排序排序演算法
- 排序演算法–氣泡排序排序演算法
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- 排序:氣泡排序&快速排序排序
- 氣泡排序演算法排序演算法
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- java氣泡排序演算法實現Java排序演算法
- 資料結構與演算法——排序演算法-氣泡排序資料結構演算法排序
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- Java實現氣泡排序和插入排序演算法Java排序演算法
- 【C語言】氣泡排序與快速排序C語言排序
- 氣泡排序、歸併排序與快速排序比較排序
- 畫江湖之演算法篇【排序演算法】氣泡排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 氣泡排序演算法排序
- 深入淺出的排序演算法-氣泡排序排序演算法
- 演算法(氣泡排序,快排,歸併排序)演算法排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 氣泡排序(Java)排序Java
- 【排序演算法動畫解】排序介紹及氣泡排序排序演算法動畫
- 死磕演算法之氣泡排序演算法排序
- 從演算法開始 [氣泡排序]演算法排序
- 從演算法開始[氣泡排序]演算法排序
- 【JAVA演算法】排序演算法 -- 快速排序Java演算法排序
- 氣泡排序與選擇排序排序
- Java 資料結構與演算法系列之氣泡排序Java資料結構演算法排序
- 【一起學習排序演算法】2 氣泡排序排序演算法
- C++排序演算法之氣泡排序改進版C++排序演算法
- 十大經典排序演算法之氣泡排序排序演算法
- 排序——氣泡排序排序
- Go實現氣泡排序和快速排序Go排序
- 前端面試題:演算法-氣泡排序前端面試題演算法排序
- python演算法與資料結構-氣泡排序(32)Python演算法資料結構排序
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- 排序演算法-Java實現快速排序演算法排序演算法Java
- JAVA基礎--氣泡排序Java排序
- Java實現氣泡排序Java排序
- 圖解氣泡排序及演算法優化(Java實現)圖解排序演算法優化Java