码迷,mamicode.com
首页 > 编程语言 > 详细

使用快速排序对数组排序

时间:2017-03-16 03:29:45      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:使用快速排序对数组排序

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

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],首选选取任意一个数据(通常选用第一个元素)作为关键数据,然后将所有比它小的数放到它前面,比它大的放在后面,这个过程称为一趟快速排序,递归调用此过程,即可实现数组的快速排序。

如图所示

技术分享

本文出自 “IT菜鸟” 博客,请务必保留此出处http://mazongfei.blog.51cto.com/3174958/1907003

使用快速排序对数组排序

标签:使用快速排序对数组排序

原文地址:http://mazongfei.blog.51cto.com/3174958/1907003

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!