public static void quickSort2(int[] sourse, int low, int high) { if(low>high) return; int pivot=sourse[low]; int i=low; int j=high; if(i<j) { while(i<j) { while(sourse[i]<pivot&&i<high) { i++; } while(sourse[j]>pivot&&j>low) { j--; } if(i<j) { swap(sourse,i,j); } } if(i>j) swap(sourse,low,j); quickSort2(sourse,low,j-1); quickSort2(sourse,j+1,high); } } public static void main(String[] args) { int[] sourse ; sourse=new int[]{1,23,5,-2,-45,73,9,4,7,12,47,126,0,71,40,51,99}; quickSort2(sourse, 0, sourse.length-1); System.out.println("快速排序:"); printArray(sourse);// 输出到转后数组的值 }
以上是自己写的一个快速排序的函数,小测了一下,第一次可以正确执行,第二次CPU就卡在50%,有时候还会报越界错误,真不知道是咋回事?排除了一下是不是因为数组长度太大的问题,但好像与这个没有必然联系,虽然大的时候更容易错。
现在测试,又正常了,悲勒个剧的,难道还有随机性?!
有木有同学可以帮忙挑一下刺儿的,分析一下代码哪里不太合适?
ps:谢谢一楼的回复,三楼有正确答案,这个快速排序和书上一般见到的不太一样,自己看吧。
问题补充
好,我改改看
问题补充
改好后的,注意判断等号,i<j,i==j时的基准与sourse[i]大小的问题:
public static void quickSort2(int[] sourse, int low, int high) { //System.out.println("基准值:"+sourse[low]); int i=low; int j=high; if(i<j) { int pivot=sourse[low]; while(i<j) { while(sourse[i]<= pivot&&i<j) { i++; } while(sourse[j]>pivot&&i<j) { j--; } if(i<j) { swap(sourse,i,j); } } if(pivot<sourse[i]) i--; swap(sourse,low,i); quickSort2(sourse,low,i-1); quickSort2(sourse,i+1,high); } } public static void main(String[] args) { int[] sourse ; sourse = createArray(20); //sourse=new int[]{1,23,5,-2,-45,73,9,4,7,12,47,126,0,71,40,51,99,99,40,7,12,126}; quickSort2(sourse, 0, sourse.length-1); System.out.println("快速排序:"); printArray(sourse);// 输出到转后数组的值 }
问题补充
其它的我都实现了,就是自己写快速时碰到了问题,还是写代码不够仔细