我参加了一些编程课程,我想知道是否可以获得我的Quicksort算法项目的帮助。
以下是我提出的代码:
public class QuickSort {
public static void main(String[] args)
{
int array [] = {12, 25, 17, 19, 51, 32, 45, 18, 22, 37, 15};
quickSorting(array);
System.out.printf("The sorted array is: ", array);
}
public static void quickSorting(int array[])
{
int pivot = array[0];
int i = pivot + 1;
int j = array.length;
while(i >= j)
{
while(array[i] <= pivot)
i++;
while(array[j] >= pivot)
j--;
swapValues(array[i] , array[j]);
}
swapValues(array[i] , array[j]);
swapValues(array[pivot], array[j]);
}
public static void swapValues(int a, int b)
{
int temporary = a;
a = b;
b = temporary;
}
}
我不断收到数组越界错误。
答案 0 :(得分:0)
问题在于:
int pivot = array[0];
int i = pivot + 1;
array [0] = 12 =&gt;我= 13;
现在,while(array[i] < pivot)
=&gt; [i]不能是13岁。
你可能意味着pivot = 0;
,array[0]
意味着取值,这是错误的。
答案 1 :(得分:0)
首先,交换函数由值调用,而不是通过引用调用。因此,不交换数组中的实际元素。请将实现更改为
public static void swap(int array[], int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
接下来检查&#39; i&#39;和&#39; j&#39;为了正确,数组已经排序。
我认为这应该可以解决问题。
答案 2 :(得分:0)
正如Parth指出的那样, 你错过了把它放回阵列。你交换了它,但如果你的数组没有反映出来,那么重点是什么?
如果您的原始数组是一个对象数组而不是基本类型(示例整数[]),那么它对您来说效果会很好。