C ++中的煎饼分类

2023-11-16 08:22:47

假设我们有一个数组A,我们将对A执行Pancake排序技术。这里的主要约束是我们只能使用一个称为rev(arr,i)的操作。这会将arr的元素从0反转到第i个位置。这个想法就像选择排序。我们反复将max元素放在最后以减小数组的大小。因此,如果输入像[54,85,52,25,98,75,25,11,68],那么结果将是[11,25,25,52,54,68,75,85,98]

为了解决这个问题,我们将遵循以下步骤-

  • 大小:= n

  • 当大小> 1时,执行

    • index:=从[0到size – 1]的arr中最大元素的索引

    • rev(arr,index)

    • rev(arr,size-1)

    • 大小:=大小-1

让我们看下面的实现以更好地理解-

示例

#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] << " ";
}

输入值

[54, 85, 52, 25, 98, 75, 25, 11, 68]

输出结果

[11,25,25,52,54,68,75,85,98]
  • 作者:
  • 原文链接:
    更新时间:2023-11-16 08:22:47