为什么此快速排序代码中数组的前8个元素变为1,2,3,4,5,6,7,8?

时间:2014-02-13 07:00:46

标签: java quicksort

出于某种原因,代码打印出来:

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);
    }
}
}

1 个答案:

答案 0 :(得分:4)

我不确定这是否是唯一的问题,但有一个问题是

arr.set(l,u);

应该是

arr.set(l, arr.get(u));