#include <stdio.h>
void mergesort();
void merge();
int main()
{
int a[40], n;
printf("\nEnter the number of elements:");
scanf("%d", &n);
printf("\nEnter the %d elements:", n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
mergesort(a, 0, n - 1);
printf("\nThe Sorted array is: ");
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
return 0;
}
void mergesort(int a[], int first, int last)
{
int mid;
if (first < last)
{
mid = (mid + last) / 2;
mergesort(a, first, mid);
mergesort(a, mid + 1, last);
merge(a, first, mid, last);
}
}
void merge(int a[], int first, int mid, int last)
{
int b[50];
int i, j, k;
i = first;
j = mid + 1;
k = first;
while (i <= mid && j <= last)
{
if (a[i] <= a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
}
if (i > mid)
{
while (j <= last)
b[k++] = a[j++];
}
else
{
while (i <= mid)
b[k++] = a[i++];
}
for (i = first; i <= last; i++)
a[i] = b[i];
}
我用C语言编写了这个合并排序程序,它在实现数组后显示"分段错误(核心转储)". 我不知道问题出在哪里.所以请帮帮我,我第二天有考试. 我得到的输出是这样的
输入元素数:5
输入5个元素:1 2. 3. 5. 4. 分段故障(核心转储)
发现我在实现MID变量时犯了一个错误. 正确的答案是:
mid=(first+last)/2;
感谢大家的帮助.您的每一个答复都有助于识别错误.