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

배열을 정렬하는 작업을 계산하는 C++ 코드

<시간/>

n개의 요소가 있는 배열 A가 있다고 가정합니다(n은 홀수). A는 첫 번째 n개의 자연수의 순열을 포함합니다. 함수 f(i)가 있다고 하자. 이것은 0에서 n-2 범위의 단일 인수 i를 취하고 연산을 수행합니다. A[i]> A[i+1]이면 A[i]와 A[의 값을 교환합니다. 나+1]. 처음으로 배열 A를 정렬하려면 반복 횟수를 세어야 합니다.

따라서 입력이 A =[4, 5, 7, 1, 3, 2, 6]과 같으면 출력은 5가 됩니다. 각 반복 이후의 배열 상태는 [4, 5, 1, 7, 2, 3, 6], [4, 1, 5, 2, 7, 3, 6], [1, 4, 2, 5, 3, 7, 6], [1, 2, 4, 3, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7].

단계

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

n :=Af의 크기 :=0Ans :=0 for initialize Ans :=0, do:f :=0 for initialize j :=0, j  A[j + 1]이면 f :=1 f가 0이 아닌 경우 j 초기화를 위한 루프에서 나옵니다. j :=(Ans AND 1), j  A[j + 1]이면 A[j]와 A[j + 1]을 교환합니다(Ans를 1씩 증가)Ans 반환 

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include 네임스페이스 std;int solve(vector A){ int n =A.size(); 부울 f =0; 정수 응답 =0; (Ans =0;;){ f =0; for (int j =0; j  A[j + 1]) f =1; if (!f) 중단; for (int j =(Ans &1); j  A[j + 1]) swap(A[j], A[j + 1]); 답변++; } return Ans;}int main(){ vector A ={ 4, 5, 7, 1, 3, 2, 6 }; cout <<해결(A) < 

입력

{ 4, 5, 7, 1, 3, 2, 6 }

출력

5