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循环的括号。