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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
    • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
    • ¥60 pb数据库修改与连接
    • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
    • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
    • ¥20 神经网络Sequential name=sequential, built=False
    • ¥16 Qphython 用xlrd读取excel报错
    • ¥15 单片机学习顺序问题!!
    • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
    • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)