Pancake Sort

Pancake Sort :

Author(s) : Jacob E. Goodman Date : 1975

Pancake 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

Python JavaScript Java Go C
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);
		}
	}
}
light dark