【问题标题】:Need help understanding recursion with array sorts需要帮助理解数组排序的递归
【发布时间】:2014-09-24 22:35:06
【问题描述】:

我的任务是编写一个称为 quadSort 的递归方法,它将一个数组分成 4 个部分,这些部分由 quadSort 排序,然后前两个(A 和 B)合并到一个数组(X)中,后两个(C 和 D ) 合并为一个 (Y),然后将这两个合并为一个。 quadSort 应该调用 quadSort() 4 次(每个部分一次)。我的问题是我已经完成了基本案例,但我不知道如何编写该方法的递归部分。谁能帮我理解如何去做或给我看一个例子?提前致谢。

编辑:这是我的尝试

    public static void quadSort(int array[], int index, int length){

    for (int i = 1; i<array.length; i++){
        if(array[i] <= 1000){
            for(i = 1; i<array.length;i++){         //Start point for the insertion sort
                int key = array[i];
                int j = i-1;
                while((i>-1) && (array[j] > key)){
                    array [j+1] = array[j];
                    i--;
                }
                array[j+1] = key;
            }                                       //End insertion sort
        }
        else{
            int split = (array[i])/4;

        }
    }
    return;
}

【问题讨论】:

  • 请发布您现有的尝试。
  • 你自己说的,需要先将数组拆分为4。
  • 这听起来类似于 MergeSort - 维基百科关于合并排序的文章有一个递归实现合并排序的示例(在 C 中,而不是 java 中)。

标签: java recursion


【解决方案1】:

这是一个奇怪的修改合并排序,而不是一直递归直到你得到 1 长度的子数组,然后才开始合并,你递归直到子数组长度是原始数组的 1/4长度,使用您喜欢的任何排序算法(快速排序?)对其进行排序,然后将其合并回来。如果数组没有至少 4 个元素,则不清楚预期的结果。在这种情况下,您可以将其调整为您需要做的任何事情。

使用伪代码会是这样的:

quadSort(array, l, r):
    m = array.length/2 - 1
    //First checking if it is the base case 
    // i.e. l and r define one quarter of the array
    if((l == 0 AND r < m) OR //First quarter
       (l > 0 AND r == m) OR //Second quarter
       (l == m+1 AND r < array.length - 1) OR //Third quarter
       (l > m+1 AND r == array.length - 1))   //Fourth quarter
         quicksort(array, l, r) //Base case
    else
         //Not the base case, hence we proceed to further split the array
         //and recurse on quadsort, before proceeding to merge
         m = (r+l)/2
         quadsort(array, l, m)
         quadsort(array, m+1, r)
         merge(array, l, m , r)

merge(array, l, m, r):
    //Standard merge procedure from mergesort

【讨论】:

  • 对不起,我没有指定,数组将有 40,000 个元素。这就是该计划将有 4 个主要部分的原因。
猜你喜欢
  • 1970-01-01
  • 2020-07-04
  • 2021-12-26
  • 2016-11-15
  • 2021-11-29
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 2020-05-03
相关资源
最近更新 更多