来源:成都IT培训机构
时间:2021/8/8 10:28:05
成都Java培训学校实力一览,成都Java培训就到千锋教育,中国IT职业教育良心品牌,专注Java培训,HTML5+WEB前端培训,Python+人工智能培训,Linux云计算培训,全链路UI培训,大数据培训,unity游戏开发,软件测试,PHP,互联网营销、网络安全、嵌入式物联网培训,并提供Java培训视频,云计算培训视频,HTML5培训视频,软件测试培训视频等12大培训视频,千锋教育长期坚持用“良心做教育”,提供专业的IT培训服务。
成都Java培训小编本文介绍排序需要用到的工具:左指针、右指针、中间值。
用到的思想:递归
取数组中个元素作为中间值,然后左右指针分别跟中间值进行比较,小于中间值的放在左边,大于中间值的放在右边,当左右指针重合时,重合位置处的左边数值全部比中间值小,右边全部比中间值大。
这样数组就分成了两个部分,再对这两部分如法炮制,分别又生成了两个数组,依次递归下去,递归结束的条件是左指针大于或者等于右指针。
public static void quickSort(int[]a,int left,int right){
if(left<right){
int index=getIndex(a,left,right);
quickSort(a,left,index-1);
quickSort(a,index+1,right);
}
}
public static int getIndex(int[]a,int left,int right){
int tmp=a[left];
while(left<right){
//用while循环,来判断右指针对应的数是否大于tmp,是的话不用交换,直接移动右指针即可
while(left<right&&a[right]>=tmp){
right--;
}
//顺序执行到这里,肯定是不满足上面的while循环条件,也就是右边的数要小于中间值,此时需要把右边的数换到左边
a[left]=a[right];
while(left<right&&a[left]<=tmp){
left++;
}
a[right]=a[left];
}
//当循环结束后,左右两边都分好大小,而指针重合位置处却没有值,需要把中间值放进来。
a[left]=tmp;
//返回两者相交处。
return left;
}
版权所有:搜学搜课(www.soxsok.com)