📜  煎饼分类C程序

📅  最后修改于: 2021-05-28 03:08:23             🧑  作者: Mango

给定一个未排序的数组,对给定的数组进行排序。只允许对数组执行以下操作。

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基础课程》。