1. 程式人生 > >演算法 -- Java實現快速排序(圖解 + 程式碼實現)

演算法 -- Java實現快速排序(圖解 + 程式碼實現)

排序思想:

通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

圖解:

這裡寫圖片描述
這裡寫圖片描述

排序規則:

  • 1)設定兩個變數i、j,排序開始的時候:i=0,j=N-1;   
  • 2)以第一個陣列元素作為關鍵資料,賦值給key,即 key=A[0];   
  • 3)從j開始向前搜尋,即由後開始向前搜尋(j=j-1即j- -),
  • 找到第一個小於key的值A[j],A[i]與A[j]交換;   
  • 4)從i開始向後搜尋,即由前開始向後搜尋(i=i+1即i++),
  • 找到第一個大於key的A[i],A[i]與A[j]交換;   
  • 5)重複第3、4、5步,直到 I=J;
  • (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。
  • 找到並交換的時候i, j指標位置不變。
  • 另外當i=j這過程一定正好是i+或j-完成的最後令迴圈結束。)

程式碼實現:

public static void quickSort(int[] array, int indexStart, int indexEnd) {
    int pivotIndex = (indexStart + indexEnd) / 2;
    // swap
    swap(array
, pivotIndex, indexEnd); int k = partition(array, indexStart - 1, indexEnd, array[indexEnd]); swap(array, k, indexEnd); if ((k - indexStart) > 1) quickSort(array, indexStart, k - 1); if ((indexEnd - k) > 1) quickSort(array, k + 1, indexEnd); } private static int
partition(int[] array, int left, int right, int pivot) { do { while (array[++left] < pivot) ; while ((right != 0) && array[--right] > pivot) ; swap(array, left, right); } while (left < right); swap(array, left, right); return left; } public static void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; }

相關推薦

no