Pancake Sort
Pancake Sort :
Author(s) : Jacob E. Goodman Date : 1975Pancake sorting is the colloquial term for the mathematical problem of sorting a disordered stack of pancakes in order of size when a spatula can be inserted at any point in the stack and used to flip all pancakes above it. A pancake sort algorithm is an algorithm that solves this problem.
| Time Complexity | O(n²) |
| Best Case | O(n) |
| Worst Case | O(n²) |
| Space Complexity | O(1) |
| Stable | No |
Code Integration:
* the code might contain some bugs or may not work correctly
def flip(arr, i):
start = 0
while start < i:
arr[start], arr[i] = arr[i], arr[start]
start += 1
i -= 1
def find_max(arr, n):
mi = 0
for i in range(0, n):
if arr[i] > arr[mi]:
mi = i
return mi
def pancake_sort(arr):
n = len(arr)
curr_size = n
while curr_size > 1:
mi = find_max(arr, curr_size)
if mi != curr_size - 1:
flip(arr, mi)
flip(arr, curr_size - 1)
curr_size -= 1
function flip(arr, i) {
let start = 0;
while (start < i) {
let temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
start++;
i--;
}
}
function findMax(arr, n) {
let mi = 0;
for (let i = 0; i < n; i++) {
if (arr[i] > arr[mi]) mi = i;
}
return mi;
}
function pancakeSort(arr) {
let n = arr.length;
for (let currSize = n; currSize > 1; --currSize) {
let mi = findMax(arr, currSize);
if (mi !== currSize - 1) {
flip(arr, mi);
flip(arr, currSize - 1);
}
}
}
public static void flip(int[] arr, int i) {
int start = 0;
while (start < i) {
int temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
start++;
i--;
}
}
public static int findMax(int[] arr, int n) {
int mi = 0;
for (int i = 0; i < n; i++) {
if (arr[i] > arr[mi]) mi = i;
}
return mi;
}
public static void pancakeSort(int[] arr) {
int n = arr.length;
for (int currSize = n; currSize > 1; --currSize) {
int mi = findMax(arr, currSize);
if (mi != currSize - 1) {
flip(arr, mi);
flip(arr, currSize - 1);
}
}
}
func flip(arr []int, i int) {
start := 0
for start < i {
arr[start], arr[i] = arr[i], arr[start]
start++
i--
}
}
func findMax(arr []int, n int) int {
mi := 0
for i := 0; i < n; i++ {
if arr[i] > arr[mi] {
mi = i
}
}
return mi
}
func pancakeSort(arr []int) {
n := len(arr)
for currSize := n; currSize > 1; currSize-- {
mi := findMax(arr, currSize)
if mi != currSize-1 {
flip(arr, mi)
flip(arr, currSize-1)
}
}
}
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--;
}
}
int findMax(int arr[], int n) {
int mi = 0;
for (int i = 0; i < n; i++) {
if (arr[i] > arr[mi]) mi = i;
}
return mi;
}
void pancakeSort(int arr[], int n) {
for (int currSize = n; currSize > 1; --currSize) {
int mi = findMax(arr, currSize);
if (mi != currSize - 1) {
flip(arr, mi);
flip(arr, currSize - 1);
}
}
}