javaee论坛

普通会员

225648

帖子

346

回复

360

积分

楼主
发表于 2019-10-30 13:45:06 | 查看: 90 | 回复: 1

书读百遍,其义自见。果然每次复习都会有不同的收获。

1.排序过程

快排的详细过程如下图所示。1,2,3,4是一个循环,循环条件是low<high。low==high的时候退出。然后1和3又是分别是两个循环,用来找到满足条件的数。第一步的循环条件是low<high&&arr[high]>=temp。找到小于temp的数才退出第二步的循环条件是low<high&&arr[low]<=temp。找到大于temp的数才退出。第三步和第四步就是赋值操作了。第三步是将找到的小于temp的数arr[high]赋值给arr[low]。第四步是将找到的大于temp的数arr[low]赋值给arr[high]。最后循环结束,将temp赋值给arr[low]。返回此时的下标。递归的对arr[low]->arr[pos-1]以及arr[pos+1]->arr[high]进行快排。

2.示例代码packageorg.jinyuxin.sort.ExchangeSort;publicclassQuickSort{publicstaticvoidmain(String[]args){int[]arr={8,5,6,7,4,2,3,1};intlen=arr.length;quickSort(arr,0,len-1);for(inti:arr){System.out.println(i);}}publicstaticvoidquickSort(int[]arr,intlow,inthigh){if(low<high){intpos=findPosition(arr,low,high);//递归对右半边进行快排quickSort(arr,low,pos-1);//对左半边进行快排quickSort(arr,pos+1,high);}}publicstaticintfindPosition(int[]arr,intlow,inthigh){//枢纽值inttemp=arr[low];//low等于high的时候退出循环while(low<high){//从后向前,直到找到第一个小于temp的数才退出while(low<high&&arr[high]>=temp){high--;}//找到小于枢纽值的数以后,赋值给arr[low]arr[low]=arr[high];//从前向后,直到找到第一个大于temp的数才退出while(low<high&&arr[low]<=temp){low++;}//找到大于枢纽值的数以后,赋值给arr[high]arr[high]=arr[low];}//此时将枢纽值赋值给low=high位置arr[low]=temp;//返回枢纽的最终位置returnlow;}}3.示例结果


普通会员

0

帖子

254

回复

256

积分
沙发
发表于 2024-04-27 14:59:56

很好

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017