快速排序的基本思想:(1)先從數列中選擇乙個數作為基準數 ,一般會把陣列中最左邊的數當做基準數;
(2)然後從數列兩邊進行檢索:先從右邊檢索比基準數小的,再從左邊檢索比基準數大的; 如果檢索到了,就停下,然後交換這兩個元素。然後再繼續檢索。
(3)直到左檢索和右檢索相遇,把基準數和相遇位置的數交換。
(4)第一輪檢索完成。
(5)以第一輪左檢索和右檢索相遇的位置為界,將數列劃分為左右兩個區間,然後再繼續在兩個子區間裡檢索,方式和第一輪一樣。
特點:基準數左邊都比它小,右邊都比它大。快速排序的平均時間複雜度為o(nlogn),最壞的情況複雜度為o(nn),最壞情況出現在每次切分選的切分元素總是當前切分陣列的最小值時。因其在排序過程中,會交換元素打亂陣列原本的相對順序,所以快速排序是不穩定的演算法。
**實現:
package com.qianfeng.user.controller;
/** * 快速排序
* @author:ziyachen
*/public class quicksort
//定義變數儲存基準數
int base = arr[left];
//定義變數i指向最左邊
int i = left;
//定義變數j指向最右邊
int j = right;
//當i和j不相遇時,在迴圈中檢索
while(i != j)
//i從左往右移動
while(arr[i] <= base && i
// i和j相遇,交換位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}//把相遇的位置賦值給基準數這個位置上的元素
arr[left] = arr[i];
//把基準數賦值給相遇位置的數
arr[i] = base;
//基準數到這裡就歸位了,左邊的數字都比它小,右邊的數字都比它大
//再來排基準數左邊的數
quicksort(arr,left,i - 1);
//再來排基準數左邊的數
quicksort(arr,j + 1,right);
}//測試
public static void main(string args) ;
quicksort(arr,0,arr.length-1);
for (int i = 0;i}}
點波訂閱,感謝老鐵們的支援!謝謝!
快速排序實現
1.結束條件 low high 2.快速排序要分而治之。故需要分的位置,位置便是當前元素經過排列後應該所在的位置。3.對於單次的排列,都使得乙個元素排在了正確的位置,她的左面比她小,右側比她大。package com.jue.quicksort public class quicksort logs...
快速排序實現
快速排序的 快 是因為使用了 分治法 使其時間複雜度降低到了 nlogn author qucg version 2019 5 19 description 快速排序,快速排序的 快 是因為使用了 分治法 public class quicksort 得到基準元素位置 int pivotindex ...
快速排序實現
快速排序的基本思想是 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,從而使全部的資料有序。快排的平均時間複雜度是o nlogn 最壞是o n 2 1 public class ...