두 개의 배열 aa[5] = {5, 4, 9, -1, 3}
및 bb[2] = {16, -11}
이 주어진 경우 세 번째 배열 cc[7]
에 정렬하는 간단한 함수를 만들었습니다. 병합 함수가 정렬되지 않은 배열을 출력하는 이유는 무엇입니까?
#include<stdio.h>
void merge(int *, int *, int *, int, int);
int main(){
int aa[5] = {5, 4, 9, -1, 3};
int bb[2] = {16, -11};
int cc[7];
merge(aa, bb, cc, 5, 2);
return 0;
}
void merge(int *aa, int *bb, int *cc, int m, int n){
int i = 0, j = 0, k = 0;
while(i < m && j < n){
if(aa[i] < bb[j])
cc[k++] = aa[i++]; /*Smallest value should be assigned to cc*/
else
cc[k++] = bb[j++];
}
while(i < m) /*Transfer the remaining part of longest array*/
cc[k++] = aa[i++];
while(j < n)
cc[k++] = bb[j++];
}
cc
배열
cc = {-11, -1, 3, 4, 5, 9, 16}
대신
cc = {5, 4, 9, -1, 3, 16, 11}
을 반환합니다.
cc[k++] = aa[i++]
및
cc[k++] = bb[j++]
과 같은 할당은 작동하지 않습니다. 어쨌든 논리적 테스트
if aa[i] < bb[j]
은 무시됩니다.
나는 그래서 내가 더 차이, 두 개의 서로 다른 표준 테스트, 연산자 우선 순위 문제를 가정 :
gcc main.c -o main.x -Wall
gcc main.c -o main.x -Wall -std=c89
나는 모든 관련 오류를 찾을 수없는 코드를 여러 번 체크. 이 시점에서 어떤 제안을 주시면 감사하겠습니다.
@Worice 원래 배열이 처음 주문되었다고 가정합니다. –
귀하의 접근 방식은 입력 배열의 요소가 최소에서 최대로 정렬되어 있다고 가정합니다. 그것은 제시된 입력에 맞지 않습니다. –
이것은 매우 간단한 프로그램이므로 디버거에 익숙해 질 수있는 좋은 기회입니다. –