2016-01-20 40 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 –

相關問題