一直说要开通个博客,一直拖拖拉拉的到现在,想写点东西能给自己整理下思路,也能帮助下可爱的同学,水平有限,有不足可以指正,不喜勿喷
在java中有个叫Arrays.sort()的方法,可以为我们实现对数组的升序排序,实际上,它使用的是一种经过优化的快速排序,而快速排序是普通冒泡排序的改进。
对于一个给定的数组array,快速排序的思想是,选取其中一个元素k1作为关键字,通过一定的方法把小于k1的所有元素移动到k1的左边,大于k1的元素移动到k1的右边。
举个例子,有这样一个数组array:
57,68,59,52,72,28,96,33,24,19
假设我们选取57为k1,通过移动分为
19,24,33,52,28,57,96,72,59,68;
令S1={19,24,33,52,28},S2={96,72,59,68}
对S1,S2两个子集分别再做一次这样的操作,不断细分,最后达到每一个元素,左边的比右边的小,实现排序。
至于如何实现元素的移动,给出一个图可能更方理解,图是网上找的,画质有点模糊,不过不影响我们分析问题。
源码如下,亲测可用
以下是测试代码public static void quick_sort(int[] array,int left,int right){//left,right刚开始分别是57,19 if(left<right){//每次递归调用执行这一步,用于判断是否已经到了最底层 //把每一个子序列的左右游标分别赋值给零时变量,一般选取最左边的作为基准值 int i=left,j=right,referenceValue=array[left]; //在执行循环过程中,i,j的值是会更改的 while(i<j){ while(i<j && array[j]>=referenceValue){ j--; } if(i<j){ //这里其实有个很巧妙的操作,i++就是自身+1,但是自加之前进行运算 //假设原来i=3,这个语句执行的时候,i++,i瞬间变为4 //但是还是用i=3进行操作,也就是array[3]=array[j]; array[i++]=array[j]; //这个代码可以等价为array[i]=array[j];i++ } //这里是左游标往右边移动,具体过程跟上面相反 while(i<j && array[i]<referenceValue){ i++; } if(i<j){ array[j--]=array[i]; } } array[i]=referenceValue; quick_sort(array,left,i-1); quick_sort(array,i+1,right); } }
public static void main(String[] argt){ int[] array={57,68,59,52,72,28,96,33,24,19}; int left=0,right=array.length-1; quick_sort(array,left,right); for(int i=0;i<array.length;i++){ System.out.println(array[i]); } }
quick_sort新手入门
最新推荐文章于 2024-08-30 21:58:39 发布