1. 程式人生 > >java實現快速排序演算法

java實現快速排序演算法

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]);
		}
	}

}