是对气泡排序的一种改进,排序速度较快

int[] array = new int[10];
		//生成随机数对象
		Random random = new Random();
		for (int i = 0; i < array.length; i++) {
			array[i] = random.nextInt(50);
			System.out.print(array[i]+" ");
		}
		System.out.println("\n排序后:");
		quickSort(array,0,array.length-1);
	}

	private static void quickSort(int[] array, int lowIndex
			, int hightIndex) {
		//记录最小索引
		int low = lowIndex;
		//记录最大索引
		int hight = hightIndex;
		//记录分界点元素
		int middle;
		if (hightIndex>lowIndex) {
			//确定中间分界点元素值
			middle = array[(lowIndex+hightIndex)/2];
			while(low<=hight){
				while ((low<hightIndex)&&(array[low])<middle) {
					//确定不大于分界元素值的最小索引
					++low;
				}
				while ((hight>lowIndex)&&(array[hight])>middle) {
					//确定大于分界元素值的最大索引
					--hight;
				}
				//如果最大索引与最小索引没有重叠
				if (low<=hight) {
					//交换两个索引的元素
					swap(array,low,hight);
					//递增最小索引
					++low;
					//递减最大索引
					--hight;
				}
			}
			//递归排序未分界元素
			if (lowIndex<hight) {
				quickSort(array, lowIndex, hight);
			}
			if (low<hightIndex) {
				quickSort(array, low, hightIndex);
			}
		}
	}

	private static void swap(int[] array, int low, int hight) {
		//交换数组元素
		int temp = array[low];
		array[low] = array[hight];
		array[hight] = temp;
		//输出
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]+"\t");
		}
		System.out.println();
	}

//快速排序算法原理:

通过一趟排序将要排序的数据分割成两个独立的两部分,其中一部分的数据都比另一部分的数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序可以递归进行,依此使整个数据变成有序序列。


例如:

假设要排序的是A[1]···A[N],首选选取任意一个数据(通常选用第一个元素)作为关键数据,然后将所有比它小的数放到它前面,比它大的放在后面,这个过程称为一趟快速排序,递归调用此过程,即可实现数组的快速排序。

如图所示

wKioL1jJOfCCuPWAAABBm60nn5o729.jpg-wh_50