Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 정렬하기 위해 개별적으로 정렬할 수 있는 최대 파티션 수


0과 N-1 범위에 있는 요소가 있는 N개의 숫자 배열이 제공됩니다. 요소가 정렬되지 않습니다. 목표는 개별적으로 정렬할 수 있는 배열의 최대 파티션 수를 찾은 다음 연결하여 길이가 N인 전체 정렬된 배열을 만드는 것입니다.

각 파티션은 그 안의 요소가 정렬되지 않도록 선택됩니다. 0과 N-1 사이의 N 숫자의 경우 정렬된 요소는 값과 동일한 인덱스에 있습니다. Arr[i] =i.

각 요소를 왼쪽에서 지금까지 찾은 최대값과 비교하여 이 문제를 해결할 것입니다. 최대값의 올바른 위치에 도달하면 (최대값 ==i ). 왼쪽에 있는 모든 요소가 작아서 별도의 파티션을 만들 수 있습니다. 오른쪽에 있는 모든 것이 더 큽니다. 이제 나머지 올바른 요소에 대해 동일한 절차를 수행하고 파티션으로 나눕니다.

예를 들어 이해합시다.

입력 - Arr[]={ 0,3,2,1,4,5 }

출력 − 최대 파티션 수 − 3

설명 − 0부터 시작하여 max=0 Arr[0]

로 설정합니다.

인덱스 0과 3 사이. 3이 최대입니다. 인덱스 i=3( maxx==i)에 도달했을 때. 따라서 첫 번째 파티션은 [0,3,2,1]

입니다.

인덱스 4의 경우 최대값은 4입니다. 인덱스 i=4( maxx==i). 따라서 두 번째 파티션은 [4]

입니다.

인덱스 5의 경우 최대값은 5입니다. 인덱스 i=5( maxx==i). 따라서 두 번째 파티션은 [5]

입니다.

총 3개의 파티션 [0,3,2,1][4][5]. 각각을 정렬하고 연결합니다.

입력 - Arr[]={ 5,4,3,2,1,0 }

출력 − 최대 파티션 수 − 1

설명 − 0부터 시작하여 max=0 Arr[0]

로 설정합니다.

인덱스 0과 5 사이. 5가 최대입니다. 인덱스 i=5( maxx==i)에 도달했을 때. 따라서 파티션만 [5,4,3,2,1,0]

입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 0에서 N 범위의 숫자로 초기화된 정수 배열 Num[]을 사용합니다.

  • partitions(int arr[], int n ) 함수는 배열과 그 길이를 매개변수로 취하고 전체 배열을 정렬하기 위해 개별적으로 정렬할 수 있는 최대 파티션 수를 반환합니다.

  • 초기 파티션 수는 0입니다. 초기 최대값은 maxx에서 arr[0]입니다.

  • 가장 왼쪽 요소에서 시작하는 모든 요소에 대해. maxx보다 큰지 찾으십시오.

  • arr[i]>maxx가 참인 경우. 최대 업데이트

  • 현재 maxx와 index가 같은 경우. ( maxx==i ) 그러면 i까지의 모든 요소는 하나의 파티션의 일부입니다. 증분 수.

  • 오른쪽에 있는 나머지 요소에 대해 끝까지 이 작업을 수행합니다.

  • 결과를 count로 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int partitions(int arr[], int n){
   int count = 0;
   int maxx = arr[0];
   for (int i = 0; i < n; ++i) {
      if(arr[i] > maxx)
         maxx=arr[i];
      if (maxx == i)
         count++;
   }
   return count;
}
int main(){
   int Num[] = { 2,1,0,4,5,3 };
   int len = 6;
   cout <<"Maximum partitions that can be sorted: "<<partitions(Num, len);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Maximum partitions that can be sorted: 18