快速排序 (java)

三人行,必有我師

方法 1

關鍵過程圖

在這裏插入圖片描述

java 代碼

/**
 * 快速排序 爲 不穩定排序
 * @author jishali
 *
 */
public class QuickSort {

	public static int divide(int[] array, int l, int r) {
		int point = l + (int)Math.random()*(r - l);  //  隨機選取軸點元素
		int temp = array[point];
		
		while (l < r) {

			while (l < r) {
				if (temp < array[r]) {      // 如果是  <= ,當相同元素較多時,會出現軸點元素temp分佈不均勻,
					r--;
				} else {
					array[l] = array[r];
					l++;
					break;
				}
			}
			while (l < r) {
				if (temp > array[l]) {
					l++;
				} else {
					array[r] = array[l];
					r--;
					break;
				}
			}
		}
		array[l] = temp;
				
		return l;
	}

	public static void quickSort(int[] array, int l, int r) {
		if (l>r) {
			return;
		}
		
		int middle = divide(array, l, r);
		quickSort(array, l, middle - 1);
		quickSort(array, middle + 1, r);
	}

	public static void result(int[] array) {
		for (int i : array) {
			System.out.print(i + " ");
		}
	}
	
	public static void main(String[] args) {

		int[] array = {3,5,6,2,9,0};
		quickSort(array, 0, array.length-1);
		result(array);
	}
}


方法 2

public class QuickSort {

	public static int divide(int[] array, int L, int R) {
		int point = array[R];
		int j = L;
		for (int i = L; i < R; i++) { // 從L 開始
			if (array[i] < point) {
				int temp = array[j];
				array[j] = array[i];
				array[i] = temp;
				j++;
			}
		}

		int temp = array[j];
		array[j] = array[R];
		array[R] = temp;

		return j;

	}

	public static void quickSort(int[] array, int l, int r) {
		if (l > r) {
			return;
		}

		int middle = divide(array, l, r);
		quickSort(array, l, middle - 1);
		quickSort(array, middle + 1, r);

	}

	public static void result(int[] array) {
		for (int i : array) {
			System.out.print(i + " ");
		}
	}

	public static void main(String[] args) {

		int[] array = { 10, 4, 7, 2, 9, 0, 7 };
		quickSort(array, 0, array.length - 1);
		result(array);

	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章