给定数组8,5,3,7,1,6,4,2。列出数组以显示内存中的数组更改。您可以在每个分区呼叫终止后列出阵列。
我不确定我是否理解这个问题,但如果我只是简单地运行快速排序算法,则枢轴或中间值似乎为2.这是否意味着第一个分区位于索引2处? (8,5,3)& (7,1,6,4,2)? 你下一步怎么做?我没有得到这种算法:(我知道Newb的东西,但我很快被抛入其中。
提前致谢!
答案 0 :(得分:1)
您必须显示您的数组在每个步骤中的排序方式。最好在控制台中显示您选择的数据透视表,然后显示数组中发生的更改。对于下一次调用之前的递归操作打印数组,我正在共享下面的代码
public class Quicksort
{
int[] array;
public int[] sort(int[] array)
{
int[] result= null;
this.array = array;
sort(0, array.length-1);
return this.array;
}
public void sort(int lowerIndex, int heigherIndex)
{
int i= lowerIndex;
int j= heigherIndex;
int piviot = array[(lowerIndex + ((heigherIndex-lowerIndex)/2))];
System.out.println("Piviot selected " + piviot);
while (i<=j)
{
while (array[i]<piviot)
i++;
while (array[j]>piviot)
j--;
if(i<=j)
{
exchange(i,j);
i++;
j--;
}
}
printArray();
if (lowerIndex<j)
sort(lowerIndex,j);
if (heigherIndex>i)
sort(i,heigherIndex);
}
private void printArray(){
for(int x:array)
{
System.out.print(x + " ");
}
System.out.println();
}
private void exchange(int i, int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String[] args) {
Quicksort quicksort = new Quicksort();
int[] input = {24,2,45,20,56,75,2,56,99,53,12};
quicksort.sort(input);
}
}