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