void mergeSort(int array[], int length);
void merge(int leftarray[], int rightarray[], int array[], int length);
int main(int argc, string argv[])
{
int unsorted[] = {9, 3, 6, 1, 4, 5, 2, 8, 7};
int length = sizeof(unsorted) / sizeof(int);
printf("unsorted array: \n");
for (int i = 0; i < length; i++)
{
printf("%d", unsorted[i]);
}
printf("\n");
mergeSort(unsorted, length);
printf("sorted array: \n");
for (int i = 0; i < length; i++)
{
printf("%d", unsorted[i]);
}
printf("\n");
}
void mergeSort(int array[], int length)
{
if(length <= 1)
{
return;
}
int middle = length / 2;
int leftarray[middle];
int rightarray[length - middle];
for (int i = 0, j = 0; i < length; i++)
{
if(i < middle)
{
leftarray[i] = array[i];
}
else
{
rightarray[j] = array[i];
j++;
}
}
mergeSort(leftarray, length);
mergeSort(rightarray, length);
merge(leftarray, rightarray, array, length);
}
void merge(int leftarray[], int rightarray[], int array[], int length)
{
int leftSize = length / 2;
int rightSize = length - leftSize;
int a = 0;
int l = 0;
int r = 0;
while(l < leftSize && r < rightSize)
{
if (leftarray[l] < rightarray[r])
{
array[a] = leftarray[l];
l++;
a++;
}
else
{
array[a] = rightarray[r];
r++;
a++;
}
}
while(l < leftSize)
{
array[a] = leftarray[l];
l++;
a++;
}
while(r < rightSize)
{
array[a] = rightarray[r];
r++;
a++;
}
}
花了一个小时试图找出解决问题的方法,但没有成功
你的
mergeSort
函数的这一部分是错误的:
mergeSort(leftarray, length);
mergeSort(rightarray, length);
您传递的
length
与此处的输入相同,因此这将成为无限递归(或者超出范围的数组访问可能会发生运行时错误)。
该部分应该是:
mergeSort(leftarray, middle);
mergeSort(rightarray, length - middle);