C Program for Pancake sorting

• Last Updated : 10 Jun, 2022

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

 /* 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// operationsint 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 functionint 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

Time Complexity: O(n2)
Auxiliary Space: O(1)

Please refer complete article on Pancake sorting for more details!

My Personal Notes arrow_drop_up