qqyifeng 2015-11-08 10:58 采纳率: 100%
浏览 681

归并排序,递归数组下面变化

请问大家在//递归调用这部
Merge(sourceArr,tempArr,startIndex,midIndex,endIndex);// 为什么第一次执行完这部后,endIndex从1变为了2,哪里给他加1了?

// 2路归并排序
namespace ConsoleApplication1
{
class CMergeSort
{
static void Main(string[] args)
{
int[] a = new int[5] { 50, 32, 20, 30, 70 };
int[] b = new int[5];
int i;
MergeSort(a, b, 0, 4);
}

//递归调用!!!
static void MergeSort(int[] sourceArr, int[] tempArr,int startIndex, int endIndex)
{
int midIndex;

if (startIndex == endIndex)
    {
    tempArr[startIndex] = sourceArr[startIndex];
    }
    else
{
    midIndex=(startIndex+endIndex)/2;
    MergeSort(sourceArr,tempArr,startIndex,midIndex);
    MergeSort(sourceArr,tempArr,midIndex+1,endIndex);
    Merge(sourceArr,tempArr,startIndex,midIndex,endIndex);// 为什么第一次执行完这部后,endIndex从1变为了2,哪里给他加1了?
}

}

static void Merge(int[] sourceArr, int[] tempArr, int startIndex, int midIndex, int endIndex)

{
int i = startIndex,j=midIndex+1,k = startIndex;
//while(i!=midIndex+1 && j!=endIndex+1)
while(i<=midIndex&& j<=endIndex)
{
if(sourceArr[i]<sourceArr[j])
tempArr[k++] = sourceArr[i++];
else
tempArr[k++] = sourceArr[j++];
}
while (i<=midIndex)
tempArr[k++] = sourceArr[i++];
while (j<=endIndex)
tempArr[k++] = sourceArr[j++];
for (i = startIndex; i <= endIndex; i++)
sourceArr[i] = tempArr[i];
}

//int main(int argc,char * argv[])
//{
// int a[8]={50,10,20,30,70,40,80,60};
// int i,b[8];
// MergeSort(a,b,0,7);
// for(i=0;i<8;i++)
// printf("%d ",a[i]);
// printf("\n");
// return 0;
//}
}
}


  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮