标签:使用快速排序对数组排序
是对气泡排序的一种改进,排序速度较快
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