快速排序的Java實現 效能分析以及適用場景

2021-08-07 02:21:45 字數 1933 閱讀 4439

**如下:

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實現)

快速排序是一種非常高效的排序演算法,它採用了 分而治之 的思想,把大的拆分成小的,小的再拆分為更小的。其原理如下 對於給定一組記錄,通過一趟排序後,將原序列分為兩部分,其中前一部分的所有記錄都比後一部分的所有記錄小,然後再依次對前後兩部分的記錄進行快速排序,遞迴該過程,直到序列中所有的記錄均為有序為...