我写了一个接收数组的简短代码并对其进行排序。 这是我的第一次,我有很多错误 - 请尽可能 向我解释如何修复以及在哪里/我的错误是什么...... 我想做的就是对数组进行排序并在排序后打印出来。
#include <stdio.h>
int merge_sort(int *a,int first, int last)
{
int middle;
if(first < last)
{
middle=(first+last)/2;
merge_sort(a,first,middle);
merge_sort(a,middle+1,last);
merge(a,first,middle,last);
{
}
void main()
{
int x[] = {1, 2, 3, 1, 3, 0, 6};
int xsize= (sizeof x / sizeof x[0])
merge_sort(x, 0, sizeof x / sizeof x[0]);
for (int i = 0; i < xsize; i++) { printf("%d ", x[i]); } putchar('\n');
}
答案 0 :(得分:1)
我可以在程序中看到多个错误
int xsize= (sizeof x / sizeof x[0])
最后必须有分号;
。for(int i=0;i<xsize;printf("%d ",x[i]), i++);
不是打印数组元素的方法。 merge()
遗失了 - merge(a,first,middle,last);
所以我继续编写了这个样本mergesort
供您参考。希望这会有所帮助!!
#include <stdio.h>
/*
NOTE:
The mergesort boils downs to this..
Given two sorted array's how do we merge this?
We need a new array to hold the result of merging
otherwise it is not possible to do it using array,
so we may need a linked list
*/
void merge(int a[], int i, int j)
{
int mid = (i+j)/2;
int ai = i;
int bi = mid+1;
int newa[j-i+1], newai = 0;
while(ai <= mid && bi <= j) {
if (a[ai] > a[bi])
newa[newai++] = a[bi++];
else
newa[newai++] = a[ai++];
}
while(ai <= mid) {
newa[newai++] = a[ai++];
}
while(bi <= j) {
newa[newai++] = a[bi++];
}
for (ai = 0; ai < (j-i+1) ; ai++)
a[i+ai] = newa[ai];
}
void mergesort(int a[], int i, int j)
{
int mid = (i+j) / 2;
if (i >= j) return;
mergesort(a, i, mid);
mergesort(a, mid+1, j);
merge(a, i, j);
return;
}
int main()
{
//int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int a[] = {9, 7, 2, 3, 5, 4, 1, 8, 6, 10};
int i;
mergesort(a, 0, 9);
for (i = 0; i < 10; i++)
printf ("%d ", a[i]);
printf ("\n");
return 0;
}