-1
此合併排序用法有什麼問題?
我想對main()中給出的大小9的數組進行排序。
但是,我正在使用merge_sort方法,它給了我錯誤:「ISO C禁止嵌套函數」爲每個函數。
當我刪除arraycpy函數時,這些消息將不再出現,所以這顯然是「arraycpy」的問題。
注意,因爲我僅限於這3個錯誤:ISO C禁止嵌套函數 - 出現了什麼問題?
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void merge(int a[], int na, int b[], int nb, int c[])
{
int ia, ib, ic;
for(ia = ib = ic = 0; (ia < na) && (ib < nb); ic++)
{
if(a[ia] < b[ib]) {
c[ic] = a[ia];
ia++;
}
else {
c[ic] = b[ib];
ib++;
}
}
for(;ia < na; ia++, ic++) c[ic] = a[ia];
for(;ib < nb; ib++, ic++) c[ic] = b[ib];
}
void arraycpy(int *dest, int *src, int n)
{
int i;
int *src_p, *dst_p;
src_p = (int*)src;
dst_p = (int*)dest;
for (i = 0; i < n; i++) {
*(dst_p+i) = *(src_p+i);
}
void internal_msort(int a[], int n, int helper_array[])
{
int left = n/2;
int right = n/2;
if (n < 2)
return;
internal_msort(a, left, helper_array);
internal_msort(a + left, right, helper_array);
merge(a, left, a + left, right, helper_array);
arraycpy(a, helper_array, n*sizeof(int));
}
void merge_sort(int a[], int n)
{
int *tmp_array = malloc(sizeof(int) * n);
internal_msort(a, n, tmp_array);
free(tmp_array);
}
void rem_sort(int array[], int size)
{
merge_sort(array, size);
}
int main()
{
int array[] = {3,55,72,4,21,6,9,0,4};
merge_sort(array, 9);
for (int i=0;i<9;i++)
printf("%d | ", array[i]);
return 0;
}
我的天啊。大聲笑。你從我的生命中浪費了2個小時來拯救我,試圖找出錯誤。謝謝:) –
@sadasassadsadas,沒問題..只需要一些時間來正確地命名您的個人資料..:p – Haris
Sadasas Sadsadas? :P –