Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这个快速排序代码中数组的前8个元素会变成1,2,3,4,5,6,7,8?_Java_Quicksort - Fatal编程技术网

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

Java 为什么这个快速排序代码中数组的前8个元素会变成1,2,3,4,5,6,7,8?,java,quicksort,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 ArrayLi

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

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);
    }
}
}
import java.util.*;
公共类快速入门{
公共静态void main(字符串[]args)
{    
ArrayList arr=新的ArrayList();

对于(int n=0;n我不确定这是否是唯一的问题,但有一个问题是

arr.set(l,u);
应该是

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

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

arr.set(l,u);
应该是

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

您是否尝试打印出调用分区方法之间发生的事情?您是否尝试打印出调用分区方法之间发生的事情?谢谢!还有一个错误,是while循环的括号。谢谢!还有一个错误,是while循环的括号。