基本快速排序:列出每个分区调用的数组

时间:2018-01-30 19:32:20

标签: arrays algorithm sorting quicksort

给定数组8,5,3,7,1,6,4,2。列出数组以显示内存中的数组更改。您可以在每个分区呼叫终止后列出阵列。

我不确定我是否理解这个问题,但如果我只是简单地运行快速排序算法,则枢轴或中间值似乎为2.这是否意味着第一个分区位于索引2处? (8,5,3)& (7,1,6,4,2)? 你下一步怎么做?我没有得到这种算法:(我知道Newb的东西,但我很快被抛入其中。

提前致谢!

1 个答案:

答案 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);

 }
 }