排序之快速排序
快速排序的精髓在於如何理解它的演算法,我稱之為“填坑法”。假入有一陣列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));
}
}
相關文章
- 排序演算法之 '快速排序'排序演算法
- 排序:氣泡排序&快速排序排序
- 排序演算法之快速排序的實現排序演算法
- 快速排序&&歸併排序排序
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- 看動畫學演算法之:排序-快速排序動畫演算法排序
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- 演算法之快速排序演算法排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 快速排序排序
- 排序演算法__快速排序排序演算法
- 排序演算法:快速排序排序演算法
- 選擇排序和快速排序排序
- 四、歸併排序 && 快速排序排序
- 排序演算法 - 快速排序排序演算法
- 畫江湖之演算法篇【排序演算法】快速排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 快速排序演算法排序
- 氣泡排序、歸併排序與快速排序比較排序
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- javascript 快速排序JavaScript排序
- 快速排序javaScript排序JavaScript
- js 快速排序JS排序
- 快速排序-java排序Java
- LeetCode:快速排序LeetCode排序
- 快速排序法排序
- 分治—快速排序排序
- java 快速排序Java排序
- python 快速排序Python排序
- 演算法圖解之快速排序演算法圖解排序
- 演算法之快速排序(php版)演算法排序PHP
- 堆排序和快速排序效能比較排序
- php實現 歸併排序,快速排序PHP排序
- 快速排序快速入門排序
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- Java排序之計數排序Java排序
- Sorting 排序演算法: Quick Sort 快速排序排序演算法UI
- Go實現氣泡排序和快速排序Go排序
- 【C語言】氣泡排序與快速排序C語言排序