快速排序,代码有错误,老师帮忙看一下,是哪里的问题
来源:3-8 三路快速排序法
慕容9054781
2020-02-18
package com.imooc.sort;
public class QuickThreeSort {
public static void main(String[] args) {
int[] a = new int[]{2, 3, 5, 6, 1, 9, 4, 8};
sort(a);
print(a);
}
private static void sort(int[] a){
sort(a,0,a.length);
}
/**
* 将 a[l...r] 分为 <v ; ==v ; >v 三部分
* 之后递归 对 <v , >v 两部分进行三路快速排序
*/
private static void sort(int[] a,int l,int r){
if (l>=r) {
return;
}
int v=a[l];
int lt=l; // a[l...lt] <v
int gt=r; // a[gt...r] >v
int i=l+1;// a[lt+1...i] ==v
while(i<gt){
if (a[i]<v) {
swap(a,lt+1,i);
lt++;
i++;
}else if(a[i]>v){
swap(a,gt-1,i);
gt--;
}else{
i++;
}
}
swap(a,l,lt);
sort(a,l,lt-1);
sort(a,gt,r);
}
private static void swap(int[] a,int i,int j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
private static void print(int[] a){
for (int i : a) {
System.out.print(a[i]+" ");
}
}
}
2回答
-
weibo_溪林菁菁_0
2020-07-29
问题解决了吗?
012020-07-29 -
liuyubobobo
2020-02-19
抱歉,你的代码没有任何注释,我完全不知道你的思路。而且我无法做到同学一贴错误的代码,马上把正确的代码调试出来。如果这样的话,我就没法做别的了。问答区是用于问答的,不是我给大家调试代码的。请谅解。
课程中,我已经将算法的代码思路在视频中进行了详细的介绍。如果你需要 Java 语言的参考,对于这一小节的代码,可以参考这里:https://git.imooc.com/coding-71/coding-71/src/master/03-Sorting-Advance/Course%20Code%20%28Java%29/08-Quick-Sort-Three-Ways/src/bobo/algo
你可以尝试在你的环境下运行课程的官方代码,看是否有问题?如果没有问题,请仔细调试比对,看自己的代码哪里有问题?
如果你的代码是错误的,在一个极小的测试用例中应该就能展现出来。我的建议是你使用一个极小的测试用例,比如只有 7 个元素,进行调试,仔细跟踪程序的每一步运行,变量的变化是怎样的,和你想的是否一样,如果不一样,自己的想法哪里是错误的?
调试程序是程序员的必备能力,甚至大部分软件工程师 80% 的时间都是在调试,而非编码。对程序逻辑的深入理解和进步,就在这个过程中哦。
如果还有不理解的地方,请详细描述:具体对于什么测试用例,在哪一句,你的逻辑想法是怎样的?你认为结果是怎样的?实际却又是怎样的?你为什么认为程序不应该产生升这样的结果?
继续加油!:)
00
相似问题
回答 3
回答 1