知识屋:更实用的电脑技术知识网站
所在位置:首页 > 教育

Java实现快速排序最简单最清楚的方法!初学者也能看懂!最重要的几点!

发表时间:2022-03-26来源:网络

最近复习java,做到快速排序,特意来写个教程。帮助大家弄懂里面最重要的几点。

思想分三步走:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。

第一步非常简单,没有特殊要求下统一把数组的第一个数作为基准。

第二步注意放的操作,到底要怎么放?
以一个数组作为示例,取区间第一个数为基准数。

初始时,l = 0; r = 9; temp = a[l] = 72

由于已经将 a[0] 中的数保存到 X 中,可以理解成在数组 a[0] 上挖了个坑,可以将其它数据填充到这来。

从j开始向前找一个比X小或等于X的数。当j=8,符合条件,将a[8]挖出再填到上一个坑a[0]中。a[0]=a[8]; i++; 这样一个坑a[0]就被搞定了,但又形成了一个新坑a[8],这怎么办了?简单,再找数字来填a[8]这个坑。这次从i开始向后找一个大于X的数,当i=3,符合条件,将a[3]挖出再填到上一个坑中a[8]=a[3]; j–;

数组变为:

l = 3; r = 7; temp=72

再重复上面的步骤,先从后向前找,再从前向后找。

从j开始向前找,当j=5,符合条件,将a[5]挖出填到上一个坑中,a[3] = a[5]; l++;

从i开始向后找,当i=5时,由于i==j退出。

此时,l= r = 5,而a[5]刚好又是上次挖的坑,因此将temp填入a[5]。

数组变为:

可以看出a[5]前面的数字都小于它,a[5]后面的数字都大于它。因此再对a[0…4]和a[6…9]这二个子区间重复上述步骤就可以了。

对挖坑填数进行总结:

1.l =left; r = right; 将基准数挖出形成第一个坑a[i]。
2.r–由后向前找比它小的数,找到后挖出此数填前一个坑a[l]中。
3.l++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[r]中。
4.再重复执行2,3二步,直到r==l,将基准数填入a[l]中。

第三步:非常重要!注意给出递归出口!!!

if (left >= right) { //一定要给出递归出口!! return; }

下面是Java的整体实现代码,亲测可过!

public class mysort { public static void main(String[] args) { int[] a={2,2,2,1,10}; mysort1(a,0,a.length-1); //数组给的right千万别越界!! for (int i:a) { System.out.println(i); } } public static void mysort1(int[] a,int left,int right) { if (left >= right) { //一定要给出递归出口!! return; } int r=right; int l=left; int temp=a[l]; while ((l //从右开始,找到一个小于temp的数的下表 r--; } if(l // 找到大于temp的数 l++; } if(l
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜