煎饼分类问题?


这里,我们将看到另一个排序问题,名为煎饼排序。该问题很简单。我们有一个数组。我们必须对此进行排序。但我们只能使用一个名为 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

更新于:2019-07-31

147 个浏览量

开始你的职业

完成课程以获得认证

开始
广告