# C Program for Pancake sorting

Given an unsorted array, sort the given array. You are allowed to do only following operation on array.

`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; ` `} `

Output:

```Sorted Array
6 7 10 11 12 20 23
```

Please refer complete article on Pancake sorting for more details!

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.