出于某种原因,代码打印出来:
1
2
3
4
5
6
7
8
sortedNum
sortedNum
排序后,我似乎无法找到错误。每次都会发生这种情况,正如我所看到的,ArrayList每次都不包含数字1-8。
import java.util.*;
public class QuickSortRunner {
public static void main(String[] args)
{
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int n = 0; n<10;n++)
{
int x = (int)(Math.random()*101)+1;
arr.add(x);
}
for(int x=0;x<10;x++)
{
System.out.println(arr.get(x));
}
//int size = arr.size();
partition(arr,0,arr.size()-1);
for(int x=0;x<10;x++)
{
System.out.println(arr.get(x));
}
}
public static void partition(ArrayList<Integer> arr, int lower, int upper)
{
int u=upper, l=lower;
if(u<l)
{
return;
}
int rand = (int)(Math.random()*(upper-lower)+lower);
int pivot = arr.get(rand);
while(l<=u)
{
while(arr.get(l)<pivot)
{
l = l+1;
}
while(arr.get(u)>pivot)
{
u=u-1;
}
if(l<=u)
{
int temp = arr.get(l);
arr.set(l,u);
arr.set(u,temp);
l++;
u--;
}
if(lower<u)
{
partition(arr,lower,u);
}
if(l<upper)
partition(arr,l,upper);
}
}
}
答案 0 :(得分:4)
我不确定这是否是唯一的问题,但有一个问题是
arr.set(l,u);
应该是
arr.set(l, arr.get(u));