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