用 C++ 进行煎饼排序
假设我们有一个数组 A,我们将在 A 上执行煎饼排序技术。这里的主要限制因素是,我们只可以使用一个名为 rev(arr,i) 的操作。这将反转从 0 到第 i 个位置的 arr 元素。这个想法类似于选择排序。我们反复放置最大元素以减小数组的大小。因此,如果输入是 [54,85,52,25,98,75,25,11,68],那么结果将是 [11,25,25,52,54,68,75,85,98]
为此,我们将按照以下步骤 -
size := n
while size > 1, do
index := arr 中 [0 到 size - 1] 范围内的最大元素的索引
rev(arr, index)
rev(arr, size - 1)
size := size - 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]
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP