c 언어 두 개의 질서 있 는 배열 이 합 쳐 집 니 다.

/ * * * * 문 제 는 이미 알 고 있 는 배열 a 에 m 개의 오름차 순 으로 배 열 된 요소 가 있 고 배열 b 에 n 개의 내림차 순 으로 배 열 된 요 소 를 설명 합 니 다. 프로 그래 밍 은 a 와 b 의 모든 요 소 를 내림차 순 으로 배열 c 에 저장 합 니 다.
입력 입력 은 두 줄 이 있 습 니 다. 첫 번 째 줄 은 먼저 정수 m 이 고 그 다음 에 m 개의 정수 입 니 다.두 번 째 줄 은 먼저 하나의 정수 n 이 고 그 다음 에 n 개의 정수, m, n 은 모두 1000000 보다 작다.
출력 을 합 친 m + n 개의 정 수 를 출력 하고 데이터 사 이 를 빈 칸 으로 구분 합 니 다.출력 이 한 줄 을 차지한다.
샘플 입력 Copy 4 1, 2, 5, 7, 3, 6, 42 샘플 출력 Copy 7, 6, 5, 4, 2, 1 정렬 을 시도 하 는 아이들 조심 하 세 요 ~ ~ ~ ~ ~ ~ * * * /!!!!함수 에서 배열 크기 를 정의 할 수 없 으 면 스 택 이 넘 칠 수 있 습 니 다.둘째, 거품 이 생기 거나 선택 한 정렬 방식 을 사용 할 수 없다. 이중 순환 은 시간 을 초과 할 수 있 기 때문이다.
#include 
#include 
#define N 2000000
//             
//      for     。   。
int c[N];//       ,      。
int a[N/2],b[N/2];
int main()
{
    int m,n,i;
    scanf("%d",&m);
    for(i = m-1; i>= 0; i--)
    {
        scanf("%d",&a[i]);
    }//  a           
    scanf("%d",&n);
    for( i = 0; i<n; i++)
    {
        scanf("%d",&b[i]);
    }//  b       

    //             ,      ,      
    int j,k;
    i = 0;j = 0;k = 0;
    while ( i < m && j < n)
    {
        if( a[i]>= b[j])//        ,      
        c[k++] = a[i++];
        //         , a,b          
        //   a     ,  a    c
        else
        c[k++] = b[j++];//   b     ,  b    c
    }
    while (i < m)//   while       a  b      
    //                        。
    c[k++] = a[i++];
    while (j < n)
    c[k++] = b[j++];
    for ( i = 0;i<m+n;i++)
    {
        printf("%d ",c[i]);
    }
    return 0;
}

좋은 웹페이지 즐겨찾기