我正在尝试实施3way合并排序但是我遇到了一个障碍。 2路合并排序很简单但是当你尝试3way时,在将阵列分成3部分时。在排序之前,我只是尝试实现适当的拆分和数组寻址。当我在下面运行此代码时
int main(int argc, char *argv[])
{
int arr1[]={1,2,3,4,5,6,7,8,9};
mergeSort(arr1,0,8);
mergeSort(arr1,1,9);
return 0;
}
void mergeSort(int* arr,int min,int max)
{
int mid1=(2*min + max)/3;
int mid2=max-(max/3);
std::cout <<min<<"-"<< mid1<<"-"<<mid2<<"-"<<max<< std::endl;
}
我明白了;
0-2-6-8
1-3-6-9
当我调用mergesort时,我用mergesort(array,min,max)调用它,所以它是递归调用的。 如果索引从0开始,则在中间错过1元素。我应该使用1作为最小值,因为我将数组分开3路?还是我应该学习一种更稳定,更明智的方式?