三、快速排序**實現和效率
首先,在這一串數字中挑乙個基準數,作為排序的參考,將大於該基準數的數字放在後面,小於基準數的數字放在前面。
然後,這樣一來,一串數字分成了兩部分,左部分都比基準數小,右部分都比基準數大。接著,同樣的方法,再分別從左右部分都挑出乙個基準數,同樣作為排序的參考,同樣將大於該基準數的數字放在後面,小於基準數的數字放在前面。
以此類推,直至大小排序完成為止。
為了方便,我們將第乙個數字22作為基準數。
假設一「探針」從右往前遍歷找到乙個比22小的數,然後另一「探針」從左往右遍歷找到乙個比22大的數,交換它們位置。直到兩「探針」相遇,此時左邊的都比22小,右邊的都比22大。
然後將分割好數字串的按以上方法排序
a:右探針從右往左勘測,找到比22小的數,那麼探針停在7位置上;
b:左探針從左往右勘測,找到比22大的數,那麼探針停在43位置上;
c:交換7和43;
如下圖:
繼續a步驟:右探針找到比22小的數,探針停在了2位置上;
繼續b步驟:左探針找到比22大的數,探針停在了23位置上;
繼續c步驟:交換2和23
如下圖:
繼續a步驟:右探針找到比22小的數,探針停在了6位置上;
繼續b步驟:左探針右移與右探針重合,發現6比22小,那麼交換6和22
如下圖:
最終,整串數字被22分割成兩部分,左邊全部比22小,右邊全部比22大。
然後,以此類推,按照上述方法,將左右部分分別排序,如下左半部分排序:
同理,可得出右半部分排序。
public static void main(string args) ;
int start = 0;
int end = array.length - 1;
quicksort(array, start, end);
for (int i = 0; i < array.length; i++)
}public static void quicksort(int a, int left, int right)
// 從前往後比較,如果沒有比關鍵值大的,比較下乙個,直到有比關鍵值大的交換位置
while (end > start && a[start] <= key)
start++;
if (a[start] >= key)
// 左右探針重合後,以基準值分為左右兩部分,左邊都比基準值小,右邊都比基準值大
}// 然後遞迴,直到排完所有數字
if (start > left) quicksort(a, left, start - 1);
if (end < right) quicksort(a, end + 1, right);
}
快速排序(quicksort)是對氣泡排序的一種改進。那麼以下是十萬個隨機數通過兩種排序方式用時的對比:
public static void main(string args)
int b = a;
long l = system.currenttimemillis();
int start = 0;
int end = a.length - 1;
quicksort(a, start, end);
system.out.println("100000個隨機數快速排序用時 = " + (system.currenttimemillis() - l));
long s = system.currenttimemillis();
// 氣泡排序
buboosort(b);
system.out.println("100000個隨機數氣泡排序用時 = " + (system.currenttimemillis() - s));
}public static void quicksort(int a, int left, int right)
// 從前往後比較,如果沒有比關鍵值大的,比較下乙個,直到有比關鍵值大的交換位置
while (end > start && a[start] <= key)
start++;
if (a[start] >= key)
// 左右探針重合後,以基準值分為左右兩部分,左邊都比基準值小,右邊都比基準值大
}// 然後遞迴,直到排完所有數字
if (start > left) quicksort(a, left, start - 1);
if (end < right) quicksort(a, end + 1, right);
}private static void buboosort(int arr) }}
}
100000個隨機數快速排序用時 = 58
100000個隨機數氣泡排序用時 = 2884
在10萬條資料時,所用時間長短顯而易見,那麼在大資料情況下,這種對比將更加明顯。所以可以得出:快速排序是對氣泡排序的優化和改進。 Java排序演算法 快速排序
一.思想 對氣泡排序演算法的一種改進。通過一趟排序將排序的資料分割成兩個部分,其中一部分的所有資料都比另一部分的所有資料都要小,然後再按此方法對這兩部分分別再進行快速排序,依次類推。實現為 開始時先設兩個變數i start,j end 以第乙個元素作為中間點,pivot num i 以j 的形式從後...
java排序演算法 快速排序
陣列 2,6,3,6,5,9,1 輸出 1 2 3 5 6 6 9 private static void paixu int arrs,int h,int e while arrs x arrs e 交換值 int m m arrs h arrs h arrs e arrs e m 2,6,3,6...
java快速排序演算法
package com.head.swift 快速排序 public class main sorts a,0,a.length 1 對陣列a進行公升序排列 輸出陣列 for int i a public static void sorts int a int left int right if i...