七大排序算法(下)

(六)归并排序

(七)快速排序

希尔排序相当与直接插入排序的升级,堆排序相当于简单选择排序的升级,而接下来要介绍的快速排序其实是冒泡排序的升级。

快速排序的基本思想是:每次在待排数组中选定一个基准元素,通过一趟排序,使得位于基准元素右侧的元素均大于此基准元素,基准元素左侧的元素均小于此基准元素。这样再分别对基准元素左右侧的元素分别进行排序,直至排序完成。老规矩,先上代码:

public void quikSort(int[] array) {
	qSort(array, 0, array.length - 1);
}

private void qSort(int[] array, int low, int high) {
	if (low < high) {
		int com = partition(array, low, high); //com为选定的基准元素的位置;
		qSort(array, low, com - 1); //分别对左右序列进行快速排序;
		qSort(array, com + 1, high);
	}
}

private int partition(int[] array, int low, int high) {
	int temp = array[low]; //每次选第一个元素作为基准元素;
	while (low < high) {
		while (low < high && array[high] >= temp)
			high--;//找到该移动的高位元素(此时基准元素在low处),与基准元素交换(基准元素在high处);
		swap(array, low, high);
		while (low < high && array[low] <= temp)
			low++;//找到该移动低位元素,与基准元素交换(基准元素又回到low处);
		swap(array, low, high);
	}
	return low;
}

最终,实现了数组的排序。

原文地址:https://www.cnblogs.com/torresliang/p/4844368.html