java實現快速排序演算法
阿新 • • 發佈:2019-02-15
package cn.com.wanghy; /** * 快速排序:是對起泡排序的一種改進,它的基本思想是:通過一趟排序將待排序記錄分割成獨立的兩部分, * 其彙總一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分繼續進行排序,已達到 * 整個序列有序。快速排序是一種不穩定的排序演算法,時間複雜度為O(n*lg(n))。 * * */ public class QuickSort { /** * 一趟快速排序,使陣列前半部分小於pivotkey,後半部分大於pivotkey * * @param array * @param low * @param high * @return */ public static int Patition(int[] array, int low, int high) { int pivotkey = array[low]; while (low < high) { // System.out.println("low="+low+"||high="+high); while (low < high && array[high] >= pivotkey) high--; array[low] = array[high]; while (low < high && array[low] <= pivotkey) low++; array[high] = array[low]; } array[low] = pivotkey; return low; } /** * 使用遞迴的方式,對陣列進行快速排序 * * @param array * @param low * @param high * @return */ public static int[] QSort(int[] array, int low, int high) { if (low >= high) return array; int pivotkey = Patition(array, low, high); // System.out.println("pivotkey="+pivotkey); QSort(array, low, pivotkey - 1); QSort(array, pivotkey + 1, high); return array; } public static void main(String[] args) { int[] array = { 12, 4, 2, 5, 9, 4, 3, 10, 11, 3 }; for (int i = 0; i < 10; i++) { System.out.print(" " + array[i]); } System.out.println(); QuickSort.QSort(array, 0, 9); for (int i = 0; i < 10; i++) { System.out.print(" " + array[i]); } } }