JAVA 快速排序(原理及详细解释)

1 )基本思想:选择一个基准元素, 通常选择第一个元素或者最后一个元素, 通过一趟扫描,将待排序列分成两部分, 一部分比基准元素小, 一部分大于等于基准元素, 此时基准元素在其排好序后的正确位置, 然后再用同样的方法递归地排序划分的两部分。

2)实例:

 

/**
 * 快速排序
 * 
 * @author lipeng 
 * 		思路: 1、选定轴值位置,记录轴值
 * 
 *         2、循环(条件:直到左边元素=右边元素),从右遍历,搜索满足条件的元素,从左遍历,搜索满足条件的元素。
 * 
 *         3、循环(条件:直到左边元素=右边元素 &&元素)从右遍历,遍历不满足条件的元素。
 * 
 *         4、搜索到满足条件的元素,填坑(将此元素填入轴值位置,轴值++)
 * 
 *         5、循环(条件:直到左边元素=右边元素)从左遍历,遍历不满足条件的元素。
 * 
 *         6、搜索满足条件的元素,填值坑(将此元素填入轴值位置,轴值--)
 * 
 *         7、当以上条件都不满足时(退出以上循环),即左边元素 = 右边元素时,此时,填入轴值
 * 
 *         8、以轴值为中心,分左右两个数组,分别递归调用此方法,直到所有元素满足条件。
 */

public class QuickSort {

	public static void main(String[] args) {
		int[] a = { 77, 23, 45, 89, 0, 34, 79, 27, 20, 45, 87, 23, 04, 74, 58, 70, 90 };
		quickSort(a, 0, a.length - 1);
		for (int b : a) {
			System.out.print(b + " ");
		}
	}

	public static void quickSort(int[] intArray, int low, int hight) {
		if (intArray.length == 0) {
			return;
		}
		int i = low; // 定义左指钟
		int j = hight; // 定义右指钟
		int index = intArray[low]; // 保存轴值
		while (i < j) { // 对数组每轮遍历,将数组以轴值为中心,一分为二
			while (i < j && index <= intArray[j]) { // 从左开始遍历不满足条件的值
				j--;
			}
			if (i < j) { // 将满足条件的值填入原轴值位置 ,并将左指钟右移
				intArray[i] = intArray[j];
				i++;
			}
			while (i < j && index >= intArray[i]) { // 从右开始遍历不满足条件的值
				i++;
			}
			if (i < j) { // 将满足条件的值填入原轴值位置 ,并将右指钟左移
				intArray[j] = intArray[i];
				j--;
			}
			intArray[i] = index;
			quickSort(intArray, low, i - 1); // 分为两个数组后,递归调用
			quickSort(intArray, i + 1, hight);
		}

	}

}


 

猜你喜欢

转载自blog.csdn.net/u013756305/article/details/53080055
今日推荐