需要帮助理解数组排序的递归

时间:2014-09-24 13:50:10

标签: java recursion

我的任务是编写一个名为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;
}

1 个答案:

答案 0 :(得分:0)

这是一个奇怪修改的mergeSort,它不是一直递归,直到你获得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