有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java打印每一次合并排序和快速排序算法

我试图输出我为家庭作业编写的合并排序和快速排序算法的每一步,但我很难弄清楚到底要打印什么,何时打印,以及打印语句的位置。除了打印值,我还需要在每次传递时将算法创建的数组括在括号中,如下所示:


合并排序示例所需输出:

[ 4     85     94     68     76     75     40     66     18 ]
[ 4     85     94     68     76 ] [ 75     40     66     18 ]
[ 4     85     94 ] [ 68     76 ] [ 75     40 ] [ 66     18 ]
[ 4     85 ] [ 94 ] [ 68 ] [ 76 ] [ 75 ] [ 40 ] [ 66 ] [ 18 ]
[ 4     85 ] [ 94 ]    
[ 4 ] [ 85 ]  
[ 4     85 ]    
[ 4     85     94 ] [ 68     76 ] [ 40     75 ] [ 18     66 ] 
[ 4     68     76     85     94 ] [ 18     40     66     75 ]
[ 4     18     40     66     68     75     76     85     94 ]

快速排序示例所需输出:

[ 47     44     39     77     80     19     49     45     65 ]
[ 44     39     19     45 ] [ 47 ] [ 77     80     49     65 ]
[ 39     19 ] [ 44 ] [ 45 ] [ 47 ] [ 49     65 ] [ 77 ] [ 80 ]
[ 19 ] [ 39 ] [ 44 ] [ 45 ] [ 47 ] [ 49 ] [ 65 ] [ 77 ] [ 80 ]



我的类刚刚进入堆栈和递归函数,所以我现在有点卡住了。以下是我针对每个排序算法的两个函数:


合并排序算法:

public static void MergeSort(int[] array) {
    int size = array.length;
    if (size < 2)
        return;
    int mid = size / 2;
    int leftSize = mid;
    int rightSize = size - mid;
    int[] left = new int[leftSize];
    int[] right = new int[rightSize];

    for (int i = 0; i < mid; i++) {
        left[i] = array[i];

    }

    for (int i = mid; i < size; i++) {
        right[i - mid] = array[i];
    }

    MergeSort(left);
    MergeSort(right);
    Merge(array, left, right);
}

public static void Merge(int[] array, int[] left, int[] right) {
    int leftSize = left.length;
    int rightSize = right.length;
    int i = 0, j = 0, k = 0;

    while (i < leftSize && j < rightSize) {
        if (left[i] <= right[j]) {
            array[k] = left[i];
            i++;
            k++;
        } else {
            array[k] = right[j];
            k++;
            j++;
        }
    }

    while (i < leftSize) {
        array[k] = left[i];
        k++;
        i++;
    }

    while (j < rightSize) {
        array[k] = right[j];
        k++;
        j++;
    }
}


快速排序:

public static void QuickSort(int[] array, int left, int right) {
    int pivotIndex = left + (right - left) / 2;
    int pivotValue = array[pivotIndex];

    int i = left;
    int j = right;

    while(i <= j) {
        while(array[i] < pivotValue) {
            i++;
        }

        while(array[j] > pivotValue) {
            j--;
        }

        if(i <= j) {
            int tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
            i++;
            j--;
        }

        if(left < i) {
            QuickSort(array, left, j);
        }

        if(right > i) {
            QuickSort(array, i, right);
        }
    }
}

共 (0) 个答案