![]() |
VOOZH | about |
Given an unsorted array, the task is to sort the given array. You are allowed to do only following operation on array.
Examples:
Input: arr[] = { 23, 10, 20, 11, 12, 6, 7 }
Output: { 6, 7, 10, 11, 12, 20, 23}Input: arr[] = { 0, 1, 1, 0, 0 }
Output: { 0, 0, 0, 1, 1 }
Approach: Unlike a traditional sorting algorithm, which attempts to sort with the fewest comparisons possible, the goal is to sort the sequence in as few reversals as possible.
The idea is to do something similar to Selection Sort. We one by one place maximum element at the end and reduce the size of current array by one.
Following are the detailed steps. Let given array be arr[] and size of array be n.
See following video for visualization of the above algorithm.
https://www.youtube.com/embed/kk-_DDgoXfk
Below is the implementation:
Sorted Array 6 7 10 11 12 20 23
Time Complexity: O(n2), Total O(n) flip operations are performed in above code
Auxiliary Space: O(1)
Another approach to implement pancake sort in C++ is by using a recursive algorithm .
Approach :
Step 1: Define a function to flip a subarray of the given array. This function takes two arguments: the array to be flipped, and the index of the last element of the subarray to be flipped.
Step 2: Define a function to find the index of the maximum element in a given subarray of the array. This function takes two arguments: the array to be searched, and the index of the last element of the subarray to be searched.
Step 3: Iterate over the input array from the end towards the beginning, and for each element i, do the following:
- Find the index of the maximum element in the subarray arr[0:i].
- If the maximum element is not already at the end of the subarray, flip the subarray arr[0:max_index].
- Flip the entire subarray arr[0:i] to move the element i to its correct position.
Step 4: Repeat Step 3 for the subarray arr[0:n-1], arr[0:n-2], ..., arr[0:1] until the entire array is sorted.
Sorted Array: 6 7 10 11 12 20 23
References:
https://en.wikipedia.org/wiki/Pancake_sorting