2016-01-20 38 views
-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

您在功能arraycpy

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); 
    } 
// ^^^ 
} 

错过了for环路闭合括号我不能使用string.h中图书馆因此,下一个大括号被当作for循环的大括号,因此当您定义下一个函数时,它将在下一个函数中被定义为arraycpy

+0

我的天啊。大声笑。你从我的生命中浪费了2个小时来拯救我,试图找出错误。谢谢:) –

+1

@sadasassadsadas,没问题..只需要一些时间来正确地命名您的个人资料..:p – Haris

+0

Sadasas Sadsadas? :P –

相关问题