问题描述
- 归并排序,递归数组下面变化
-
请问大家在//递归调用这部
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;
//}
}
}