给定一个未排序的数组,对给定的数组进行排序。只允许对数组执行以下操作。
flip(arr, i): Reverse array from 0 to i
/* C program for Pancake Sorting */
#include
#include
/* Reverses arr[0..i] */
void flip(int arr[], int i)
{
int temp, start = 0;
while (start < i) {
temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
start++;
i--;
}
}
/* Returns index of the maximum element in arr[0..n-1] */
int findMax(int arr[], int n)
{
int mi, i;
for (mi = 0, i = 0; i < n; ++i)
if (arr[i] > arr[mi])
mi = i;
return mi;
}
// The main function that sorts given array using flip
// operations
int pancakeSort(int* arr, int n)
{
// Start from the complete array and one by one reduce
// current size by one
for (int curr_size = n; curr_size > 1; --curr_size) {
// Find index of the maximum element in
// arr[0..curr_size-1]
int mi = findMax(arr, curr_size);
// Move the maximum element to end of current array
// if it's not already at the end
if (mi != curr_size - 1) {
// To move at the end, first move maximum number
// to beginning
flip(arr, mi);
// Now move the maximum number to end by reversing
// current array
flip(arr, curr_size - 1);
}
}
}
/* A utility function to print an array of size n */
void printArray(int arr[], int n)
{
for (int i = 0; i < n; ++i)
printf("%d ", arr[i]);
}
// Driver program to test above function
int main()
{
int arr[] = { 23, 10, 20, 11, 12, 6, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
pancakeSort(arr, n);
puts("Sorted Array ");
printArray(arr, n);
return 0;
}
输出:
Sorted Array
6 7 10 11 12 20 23
请参阅有关Pancake排序的完整文章,以了解更多详细信息!
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。