>백엔드 개발 >C++ >팬케이크 주문 질문이신가요?

팬케이크 주문 질문이신가요?

王林
王林앞으로
2023-09-07 22:41:23699검색

팬케이크 주문 질문이신가요?

여기서 팬케이크 정렬이라는 또 다른 정렬 문제를 살펴보겠습니다. 질문은 간단합니다. 배열이 있습니다. 우리는 이것을 분류해야 합니다. 그러나 우리는 rev(arr, i)라는 하나의 연산만 사용할 수 있습니다. 그러면 arr의 요소가 0에서 i번째 위치로 반전됩니다.

이 아이디어는 선택 정렬과 같습니다. 배열의 크기를 줄이기 위해 반복적으로 가장 큰 요소를 끝에 배치합니다. 이 아이디어를 이해하기 위해 알고리즘을 살펴보겠습니다.

알고리즘

pancakeSort(arr, n)

Begin
   size := n
   while size > 1, do
      index := index of max element in arr from [0 to size – 1]
      rev(arr, index)
      rev(arr, size - 1)
      size := size - 1
   done
End

#include<iostream>
using namespace std;
void rev(int arr[], int i) {
   int temp, st = 0;
   while (st < i) {
      temp = arr[st];
      arr[st] = arr[i];
      arr[i] = temp;
      st++;
      i--;
   }
}
int maxIndex(int arr[], int n) {
   int index, i;
   for (index = 0, i = 0; i < n; ++i){
      if (arr[i] > arr[index]) {
         index = i;
      }
   }
   return index;
}
int pancakeSort(int arr[], int n) {
   for (int size = n; size > 1; size--) {
      int index = maxIndex(arr, size);
      if (index != size-1) {
         rev(arr, index);
         rev(arr, size-1);
      }
   }
}
int main() {
   int arr[] = {54, 85, 52, 25, 98, 75, 25, 11, 68};
   int n = sizeof(arr)/sizeof(arr[0]);
   pancakeSort(arr, n);
   cout << "Sorted array: ";
   for (int i = 0; i < n; ++i)
   cout << arr[i] << " ";
}

출력

Sorted array: 11 25 25 52 54 68 75 85 98

위 내용은 팬케이크 주문 질문이신가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제