首页 > 编程知识 正文

java浪漫代码,java快速排序代码

时间:2023-05-03 09:13:08 阅读:19903 作者:4287

入口方法,即从外部调用的方法。 主要进行空指针判定,然后调用了局部快速排序方法。

publicvoidquicksort(int[]arr ) if ) arr==null||arr.length=1) { return; )快速排序(arr,0,arr.length - 1 ); } 主排序方法对arr数组、start到end之间的元素进行排序。 [start,end]为左闭右闭区间。

如果公共语音快速排序(int [ ] arr,int start,int end ) { //start==end,则只能对一个元素进行排序。 也就是说,不需要排序。 if (开始=结束) {返回; //分组方法调用intparti=partition(arr,start,end ); //分组确保[开始,部件]区间的要素都在[部件1,结束]以下。 也就是说,两个部分可以相对有序地//再将两个部分分别排序。 快速排序(arr、start、parti ); 快速排序(arr,parti 1,end ); } 分组方法返回值p。 对区间[start,end]的要素进行分组,以p为边界。 左边都是小于arr[p]的元素,右边都是arr[p]以上的元素。

公共int分区(int [ ] arr,int start,int end ) { int small=start - 1; swap(arr,start,end ); for(intI=start; I结束; I () if ) arr[I]arr[end] ) { small; swap(arr,I,small );//交换两个要素} } small; swap(arr,small,end ); 返回小型; }但是,实现几个不同的分区,我觉得上面的写法很容易理解。 也不容易发生错误。 和一般使用双指针的写法不同。 上述写法的思想是向前移动所有小于对照点的元素。 这样剩下的就在对照点以上了。 你不用再移动了。

这里选择的匹配点是arr[start]。 首先移动到末尾,即交换为arr[end]。

然后遍历[start,end- 1]元素,并将小于arr[end]的元素向前移动。

这里要注意的巧妙的是一个叫small的变量。 表示小于arr[end]的最后一个元素。 初始化时为start-1。 最后一次遍历完成后,将arr[end]移动到small后面。 (small的位置是最后一个小于arr[end]的元素,移动到后面正好。

即使考虑长度为2的特殊情况,也会正确处理上述代码。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。