C++두 개의 질서 있 는 배열 의 합병 을 실현 합 니 다.

2447 단어 C++배열 병합
본 논문 의 사례 는 C++두 개의 질서 있 는 배열 합병 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
검지 offer 면접 문제 5 연전 문제:
문제:두 개의 정렬 된 배열 A1 과 A2 가 있 고 A1 의 끝 에 A2 를 수용 할 수 있 는 공간 이 충분 합 니 다.A2 의 모든 숫자 를 A1 에 삽입 하고 모든 숫자 는 정렬(기본 오름차 순)하 는 함 수 를 실현 하 십시오.
사고:두 배열(문자열 포함)을 합 칠 때,이동 한 후에 모든 숫자(또는 문자)를 복사 하려 면 이동 숫자(또는 문자)를 여러 번 반복 해 야 하 며,뒤에서 앞으로 복사 하면 이동 횟수 를 줄 여 효율 을 높 일 수 있다 는 것 을 고려 합 니 다.
1.n1,n2 는 각각 배열 A1 과 A2 의 꼬리 를 가리 키 고 strNew 는 합 친 배열 의 꼬리 를 가리킨다.
2.배열 이름 이 nullptr 지침 이거 나 A1 배열 이 빈 배열 이면 되 돌아 갑 니 다.
3.배열 A1[ida]>=A2[idb]또는 idb<0 시 ida 포인터 가 가리 키 는 숫자 를 strNew 가 가리 키 는 위치 로 복사 하고 ida 는 1 칸 앞으로 이동 하 며 strNew 는 1 칸 앞으로 이동 합 니 다.
4.배열 A1[ida]5.str New<0 까지 순환 을 멈 춥 니 다.
주의:
입력 한 n1,n2 는 배열 의 길이 이 고 지침 을 할 때 모두-1 이 어야 합 니 다.
순환 종료 조건 은 통합 배열 지침 에 착안 하여 순환 종료,즉 str New<0;
형 삼 과 실 삼 의 전달 에 주의 하 십시오.수조 전입 함수 의 세 가지 성명 func(int*arr),func(int arr[n]),func(int arr[]),수조 지침 의 함수 int*func()를 되 돌려 줍 니 다.

#include<iostream>
#include<stdio.h>
using namespace std;
 
int * insert(int *str1, int *str2, int n1, int n2,int length){
  //int *dest = str1;
  if(str1 == nullptr || str2 == nullptr || length <= 0){
    return 0;
  }
  int strNew = n1 + n2 - 1;
  int ida = n1-1;
  int idb = n2-1;
  while(strNew >= 0){
    if(str1[ida] >= str2[idb] || idb<0){
      str1[strNew--] = str1[ida];
      ida--;
    }
    else if(str1[ida] < str2[idb] || ida<0){
      str1[strNew--] = str2[idb];
      idb--;
    }
  }
  return str1;
  //return dest;
}

int main() 
{
  int n1,n2;
  cin>>n1>>n2;
 int a[n1],b[n2];
  for(int i = 0; i<n1; ++i){
    cin>>a[i];
  }
  for(int i=0;i<n2;++i){
    cin>>b[i];
  }
  //int *c;
  //c = insert(a, b, n1, n2, 100);
  insert(a, b, n1, n2, 100);
  for(int i=0;i<n1+n2;++i){
    cout<<a[i]<<' ';
  }
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기