排序之快速排序
快速排序的精髓在於如何理解它的演算法,我稱之為“填坑法”。假入有一陣列arr,陣列第一個元素的索引為head,最後一個元素的索引為last,把第一個元素“挖”出來,臨時儲存,記錄“坑”的位置,這便是“挖坑”。坑有了,如何“填坑”呢?大致思路是,從最後一個元素開始,逐一遞減,直到找到一個元素比臨時值小,那麼將該資料放入“坑”中,並記錄“坑”的位置;然後從第一個元素開始,逐一遞增,直到找到一個元素比臨時值大,那麼將該資料放入“坑”中,並記錄“坑”的位置;然後又從last的位置開始往前找比臨時值小的元素……像這樣迴圈往復,直到head比last大,最後一定剩下了一個“坑”,並且處於中間位置。這樣的結果便是某一元素處於中間位置,它前面的元素都比它小,它後面的遠都比它大。核心演算法闡述完畢。之後再對該元素前面的元素和後面的元素分別做上述操作即可(遞迴)。下面給一個用java實現的整型陣列快排的例子:
import java.util.Arrays;
public class QuickSort {
public static void sort(int[] arr, int head, int last) {
int mid = quickSort(arr, head, last);
if (mid > head) {
// 遞迴
sort(arr, head, mid - 1);
}
if (mid < last) {
// 遞迴
sort(arr, mid + 1, last);
}
}
private static int quickSort(int[] arr, int head, int last) {
int index = head; //index:記錄坑的位置
int temp = arr[head]; //temp:臨時值
while (head < last) {
while (last > head) {
if (arr[last] < temp) {
arr[index] = arr[last]; //填坑
index = last;
break;
}
last--;
}
while (head < last) {
if (arr[head] > temp){
arr[index] = arr[head]; //填坑
index = head;
break;
}
head++;
}
}
arr[index] = temp; // 最後把臨時值放入坑中
return index; //返回中間值的位置
}
public static void main(String[] args) {
int[] arr = new int[]{5,3,2,1,4,2,1,8,9};
sort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
}
相關文章
- 排序演算法之 '快速排序'排序演算法
- 筆試之排序-直接插入排序、氣泡排序、快速排序筆試排序
- 排序:氣泡排序&快速排序排序
- Python之排序演算法:快速排序與氣泡排序Python排序演算法
- 排序演算法之快速排序的實現排序演算法
- 看動畫學演算法之:排序-快速排序動畫演算法排序
- 快速排序&&歸併排序排序
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- 演算法之快速排序演算法排序
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 快速排序排序
- 四、歸併排序 && 快速排序排序
- 選擇排序和快速排序排序
- 排序演算法__快速排序排序演算法
- 排序演算法:快速排序排序演算法
- 排序演算法-快速排序排序演算法
- 排序演算法 - 快速排序排序演算法
- 排序演算法——快速排序排序演算法
- O(lgn)的三種排序,快速排序、歸併排序、堆排序排序
- #排序演算法#【4】快速排序排序演算法
- 《排序演算法》——快速排序(Java)排序演算法Java
- 畫江湖之演算法篇【排序演算法】快速排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 快速排序演算法排序
- 快速排序法排序
- java 快速排序Java排序
- 快速排序javaScript排序JavaScript
- js 快速排序JS排序
- javascript 快速排序JavaScript排序
- 分治—快速排序排序
- QuickSort 快速排序UI排序
- 快速排序-java排序Java
- [JAVA]快速排序Java排序
- 快速排序 java排序Java
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 氣泡排序、歸併排序與快速排序比較排序
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- 快速排序快速入門排序