**如下:
package com.zm.testsort;
/** * 快速排序的標準實現
*@author zm
* */
public
class
quicksort
public
static
void
getquicksort(int a, int lo, int hi)
int j = partition(a, lo, hi);
getquicksort(a, lo, j);
getquicksort(a, j+1, hi);
}public
static
intpartition(int a, int lo, int hi)
a[i] = a[j];
while(i < j && a[i] <= temp)
a[j] = a[i];
}a[i] = temp;
int k = i;
return k;
}public
static
void
main(string args) ;
getquicksort(a);
system.out.print("快速排序:");
for(int i = 0; i < a.length; i++)
}}
優化後的快速排序:(任何改進演算法都需通過實驗來確定改進的效果)
package com.zm.testsort;
/** * 三向切分
* 優化後的快速排序,如果陣列中存在大量重複元素,則該演算法比標準的快排要效率高很多,
*@author zm
*/public
class
optimizequicksort
/*** 這段排序**的切分能夠將和切分元素相等的元素歸位,這樣它們就不會被包含在遞迴呼叫的子陣列之中
*/public
static
void
getoptimizequicksort(int a, int lo, int hi)
int lt = lo, i = lo + 1, gt = hi;//三向切分 分為四段:小於基準的值-[lo, lt-1]、等於基準的值-[lt, i-1]、未確定的值-[i, gt]、大於基準的值-[gt+1, hi]
int v = a[lo];//設定基準
while(i <= gt) else
if(a[i] > v) else
}getoptimizequicksort(a, lo, lt-1);//取小於基準的所有值
getoptimizequicksort(a, gt+1, hi);//取大於基準的所有值
}public
static
void
swap(int a, int b, int c)
public
static
void
main(string args) ;
getoptimizequicksort(a);
system.out.print("優化後的快速排序:");
for(int i = 0; i < a.length; i++)
}}
時間複雜度:
1. 最好情況:o(nlog2(n))
2. 平均情況:o(nlog2(n))
3. 最壞情況:o(n^2)
空間複雜度:o(log2(n))
穩定性:不穩定(相同元素的相對位置會改變)
3.1:一般應用中,比其他排序快得多,適用於陣列長度比較大的情況,對於小陣列,快速排序比插入排序慢。
3.2:如果陣列中有大量重複元素,則三向取樣的快排比標準的快排效率高很多。
快速排序的JAVA實現和效能分析
package sort 快速排序是不穩定的排序。快速排序的時間複雜度為o nlogn 當n較大時使用快排比較好,當序列基本有序時用快排反而不好。public class quicksort system.out.println 排序之前 for int i 0 i a.length i 快速排序 ...
快速排序方法Java實現與分析
package paul title 快速演演算法 author 良葛格 author paulliu public class quicksort printarray 用來跟蹤了演算法演算過程 public static void printarray int number sort 開始時,以...
排序 快速排序(java實現)
快速排序是一種非常高效的排序演算法,它採用了 分而治之 的思想,把大的拆分成小的,小的再拆分為更小的。其原理如下 對於給定一組記錄,通過一趟排序後,將原序列分為兩部分,其中前一部分的所有記錄都比後一部分的所有記錄小,然後再依次對前後兩部分的記錄進行快速排序,遞迴該過程,直到序列中所有的記錄均為有序為...