快速排序 java
概念:
快速排序的基本思想是,通過一輪的排序將序列分割成獨立的兩部分,其中一部分序列的關鍵字(這裡主要用值來表示)均比另一部分關鍵字小。繼續對長度較短的序列進行同樣的分割,最後到達整體有序。在排序過程中,由於已經分開的兩部分的元素不需要進行比較,故減少了比較次數,降低了排序時間。
時間複雜度:
平均:Ο(nlogn)
最壞:O(n2)
演算法:
從數列中挑出一個元素,稱為 "基準"(pivot),
重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。
遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
實現:
package com.alexander.sort.implementation;
public class QuickSort {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr = { 52, 40, 90, 20, 19, 50 };
quickSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static int getMiddle(int[] array, int start, int end) {
int tmp = array[start];
while (start < end) {
while (start < end && array[end] > tmp) {
end--;
}
array[start] = array[end];
while (start < end && array[start] < tmp) {
start++;
}
array[end] = array[start];
}
array[start] = tmp;
return start;
}
public static void quickSort(int[] array, int start, int end) {
if (start < end) {
int middle = getMiddle(array, start, end);
quickSort(array, start, middle - 1);
quickSort(array, middle + 1, end);
}
}
}
理論和時間複雜度圖摘自 維基百科
附:經典排序演算法總結與實現【轉載自:小黑屋】
http://xiaok.me/2015/08/27/%E7%BB%8F%E5%85%B8%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93%E4%B8%8E%E5%AE%9E%E7%8E%B0/
相關文章
- 快速排序-java排序Java
- java 快速排序Java排序
- java實現快速排序Java排序
- 快速排序(java實現)排序Java
- 快速排序 java實現排序Java
- 【JAVA演算法】排序演算法 -- 快速排序Java演算法排序
- 排序演算法-Java實現快速排序演算法排序演算法Java
- 排序之快速排序排序
- 排序:氣泡排序&快速排序排序
- Java不用遞迴的迭代快速排序示例Java遞迴排序
- 隨機快速排序Java程式碼實現隨機排序Java
- 快速排序排序
- 快速排序&&歸併排序排序
- JAVA將快速將列表分組並排序鍵Java排序
- 快速排序快速入門排序
- 排序演算法__快速排序排序演算法
- 排序演算法:快速排序排序演算法
- 選擇排序和快速排序排序
- 四、歸併排序 && 快速排序排序
- 排序演算法 - 快速排序排序演算法
- javascript 快速排序JavaScript排序
- 快速排序javaScript排序JavaScript
- js 快速排序JS排序
- LeetCode:快速排序LeetCode排序
- 快速排序法排序
- 分治—快速排序排序
- python 快速排序Python排序
- 二十、快速排序演算法——JAVA實現(遞迴)排序演算法Java遞迴
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 排序演算法之 '快速排序'排序演算法
- 遞迴-*快速排序遞迴排序
- 快速排序 (Quick Sort)排序UI
- 快速排序C++排序C++
- 三種快速排序排序
- 8.22_快速排序排序
- 簡單快速排序排序
- 圖解快速排序圖解排序
- 三種語言實現快速排序(C++/Python/Java)排序C++PythonJava
- 堆排序和快速排序效能比較排序