3路合并排序实现数组索引问题

时间:2014-09-03 15:10:25

标签: c++ arrays algorithm sorting mergesort

我正在尝试实施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路?还是我应该学习一种更稳定,更明智的方式?

0 个答案:

没有答案