public static void main(String[] args) {
int[] arr = {9, 5, 7, 3, 1, 6, 8, 4, 2};
quickSort(arr,0,arr.length - 1);
}
private static void quickSort(int[] arr, int left, int right) {
if (left >= right) {
return;
}
//先排序一遍,再遞迴拆分,和歸併有區別,歸併是先拆分,再合併排序
int partition = partition(arr, left, right);//排序完找到前一趟基準值下標,作為左右陣列的左右邊界
System.out.println(Arrays.toString(arr));
quickSort(arr,left,partition - 1);//基準位置已經排序,不用向歸併一樣參加排序
quickSort(arr,partition + 1,right);//基準位置已經排序,不用向歸併一樣參加排序
}
private static int partition(int[] arr, int left, int right) {
//陣列的第一個元素作為基準值
int pivot = arr[left];
int i = left;
int j = right;
int temp = 0;
while (i < j) {
//從右邊開始找,找到小於基準值的數
//跳出迴圈說明要麼找到小於基準值的,要麼就是j和i重了
while (i<j && arr[j] >= pivot) {
j--;
}
//從左邊開始找,找到大於基準值的數
//跳出迴圈說明要麼找到小於基準值的,要麼就是j和i重了
while (i < j && arr[i] <= pivot) {
i++;
}
//找到就開始替換,替換完畢開始下一輪找,直至拆分的陣列左右都替換完成
if (i < j) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
//此時基準值還沒動,所以把基準值放到指定位置
temp = arr[i];//這裡的i和j是重合的,所以用i和j都可以
arr[i] = arr[left];//這裡為什麼是替換left下標,因為上面的迴圈中,我們是從小到大的順序排序,i的位置一定是小於基準值的
arr[left] = temp;
return i;
}
快速排序 (Quick Sort)
相關文章
- 快速排序(Quick Sort)排序UI
- 快速排序演算法(Quick_Sort)排序演算法UI
- Sorting 排序演算法: Quick Sort 快速排序排序演算法UI
- 經典排序演算法 - 快速排序Quick sort排序演算法UI
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- Sort排序專題(5)快速排序(QuickSort)(C++實現)排序UIC++
- 排序sort排序
- sort排序排序
- Array.sort 演算法原理(插入排序\快速排序in-place實現)演算法排序
- Collections sort()排序方法排序
- 堆排序 Heap Sort排序
- Elasticsearch script sort 排序Elasticsearch排序
- 桶排序bucket sort排序
- 希爾排序(Shell Sort)排序
- 常見排序演算法及其實現(Binary,Insert、Select、Quick、Bubble.etc.Sort)排序演算法UI
- 氣泡排序 bubble sort排序
- Lucene 排序 Sort與SortField排序
- [Shell] Sort排序的例子排序
- golang sort.Sort () 排序演算法學習Golang排序演算法
- Quick Pow: 如何快速求冪UI
- 排序演算法-氣泡排序(Bubble Sort)排序演算法
- linux sort 多列正排序,倒排序Linux排序
- _sort_elimination_cost_radit和sort排序排序
- 計數排序 - Counting Sort排序
- Array.sort排序問題排序
- Collections.sort()方法,字元排序字元排序
- 插入排序(Insertion Sort)排序
- go sort.Interface 排序介面Go排序
- R排序sort、order、rank、arrange排序
- 拓撲排序 - Topological Sort排序
- [CareerCup] 3.6 Sort Stack 棧排序排序
- 【Oracle】排序與sort_area_sizeOracle排序
- 【c++】結構體sort排序C++結構體排序
- 75. Sort Colors:計數排序排序
- 《shell下sort排序命令的使用》排序
- sort按照數值大小排序排序
- C# 字典排序Array.SortC#排序
- nls_sort與漢字排序排序