2016-08-04 3 views
0

C에서 재귀 병합 정렬 알고리즘을 프로그래밍했습니다. 그러나 작동하지 않습니다. 재귀 병합 정렬이 작동하지 않습니다.

void mearge(int a[],int elementsOfA,int b[],int elementsOfB,int c[]){ 

    int elementsOfC = elementsOfB + elementsOfA; 
    int i=0,j=0,k=0; 

    while(k<elementsOfC){ 
     if(a[i]<=b[j] || j==elementsOfB) { 
      c[k]=a[i]; 
      i++; 
      k++; 
     } 

     if(b[j]<a[i] || i==elementsOfA) { 
      c[k]=b[j]; 
      j++; 
      k++; 
     } 
    } 
} 

void meargeSort(int a[], int indexOfLeft, int positionOfRight, int b[]){ 

    if(positionOfRight-indexOfLeft==1){ 
     b[0]=a[indexOfLeft]; 
    } 

    if(positionOfRight-indexOfLeft>1){ 
     int mid = (positionOfRight+indexOfLeft)/2; 
     //int left[mid-1],right[positionOfRight-mid]; 
     int left[mid],right[positionOfRight-mid]; 

     meargeSort(a,indexOfLeft,mid,left); 
     meargeSort(a,mid,positionOfRight,right); 
     mearge(left,mid-indexOfLeft,right,positionOfRight-mid,b); 
    } 
} 

여기 내 주요 기능입니다 :

#include <stdio.h> 

이 내 알고리즘입니다. 나는 algotithm에 두 개의 서로 다른 입력을 제공하고있다 :

  • 둘째 배열 BRR입니다 ARR

    • 먼저 배열입니다.
    • 두 경우 모두

    , 출력은 원하는 포함해야

    int main(int argc, char **argv) 
    { 
        int i, arr[]={5,42,31,1,-1,23,0}, brr[7]; 
    
        meargeSort(arr,0,7,brr); 
    
        //int i, brr[]={-1,23,0},brr[3]; 
        //meargeSort(arr,0,3,brr); 
    
        for(i=0;i<7;i++) 
         printf("%d ",brr[i]); 
    
        return 0; 
    } 
    
  • +1

    질문과 같은 부적절한 일종이다 행동, 특정 문제 또는 오류 및 질문 자체에서 그것을 재현하는 데 필요한 가장 짧은 코드. 분명한 문제 성명이없는 질문은 다른 독자에게 유용하지 않습니다. See : 최소한의 완전하고 검증 가능한 예제를 만드는 방법. – LPs

    +0

    merge_sort() 함수에서 왼쪽 []/오른쪽 [] 배열을 채워야합니다. – Matthew

    답변

    1

    수정 디버깅 도움말 ("왜이 코드가 작동하지 않는?")을 찾는

    while(k<elementsOfC){ 
        if(j == elementsOfB || i != elementsOfA && a[i] <= b[j]){//need check `i` 
         c[k++]=a[i++]; 
        } else if(i == elementsOfA || b[j] < a[i]){ 
         c[k++] = b[j++]; 
        } 
    } 
    
    +0

    그것은 저에게 효과적입니다. if 문에서 "i! = elementsOfA &&"를 확인해야하는 이유를 알고 싶습니다. 나는 그것을 얻지 못하고있다. –

    +0

    좋아요. 알아 줘서 고마워. –

    관련 문제