快速排序算法

先上图(来源:http://www.cnblogs.com/jingmoxukong/p/4302891.html)

一次排序过程:

快速排序算法_第1张图片

时间复杂度

        最好:O(nlogn)

        最坏:O ( n)

        平均:O(nlogn)


空间复杂度:O(nlogn)

稳定性:不稳定

public class QuickSort {

	public static void main(String[] args) {
		int[] array = { 2, 4, 5, 1, 3 };
		qsort(array, 0, array.length - 1);// 便于理解,length-1表示直接指向最右边的数
		printArray(array);
	}

	public static void qsort(int[] array, int left, int right) {
		if (left >= right)
			return;
		int l = left;
		int r = right;
		int base = array[left];// 选择最左边为基数
		while (l < r) {
			while (l < r && array[r] >= base)// 从右往左遍历直到某位置比基数小
				r--;
			array[l] = array[r];// 把上面找到的数赋给左指针位置
			while (l < r && array[l] <= base)// 从左往右遍历知道某位置比基数大
				l++;
			array[r] = array[l];// 把上面找到的数赋给右指针位置
		}
		array[r] = base;// 左右指针重合后,把基数赋给重合位置
		printArray(array);// 打印当前状态
		// 此时重合位置左边的集合全部小于base,右边集合全部大于base,分别对这两个部分快排即可
		qsort(array, left, r - 1);
		qsort(array, r + 1, right);
	}

	private static void printArray(int[] array) {
		for (int i = 0; i < array.length - 1; i++)
			System.out.print(array[i] + ",");
		System.out.println(array[array.length - 1]);
	}
}

输出:

1,2,5,4,3

1,2,3,4,5

1,2,3,4,5

1,2,3,4,5


你可能感兴趣的:(算法,快排)