package me.ramswaroop.arrays.sorting;
import java.util.Arrays;
/**
* Created by IntelliJ IDEA.
*
* @author: ramswaroop
* @date: 10/26/15
* @time: 9:20 PM
*/
public class PancakeSort {
/**
* Sorts the array {@param a} in-place in O(n^2) time complexity.
* <p/>
* This can also be seen as: Sort the array {@param a} using a method
* {@code reverse(int[] a, int end)} which reverses array {@code int[] a}
* from {@code 0} index till {@code end} index (both inclusive).
*
* @param a
*/
public static void sort(int[] a) {
int maxIndex; // max element's index
int unsortedIndex = a.length - 1; // index till which elements are unsorted
while (unsortedIndex > 0) {
maxIndex = 0;
// find max element's index
for (int j = 1; j <= unsortedIndex; j++) {
if (a[j] > a[maxIndex]) {
maxIndex = j;
}
}
// move the max element to its appropriate index if its not already in its correct index
if (maxIndex != unsortedIndex) {
reverse(a, maxIndex); // bring the max element to the front
reverse(a, unsortedIndex); // move the max element to its appropriate index
}
unsortedIndex--;
}
}
/**
* Reverses array {@param a} from {@code 0} index
* till {@code end} index.
*
* @param a
* @param end
*/
public static void reverse(int[] a, int end) {
int temp;
for (int i = 0; i <= end / 2; i++) {
temp = a[i];
a[i] = a[end - i];
a[end - i] = temp;
}
}
public static void main(String a[]) {
int[] ar = {1, 2, 3, 4, 5, 6};
System.out.println(Arrays.toString(ar));
sort(ar);
System.out.println(Arrays.toString(ar));
ar = new int[]{3, 4, 7, 1, 9, 0};
System.out.println(Arrays.toString(ar));
sort(ar);
System.out.println(Arrays.toString(ar));
ar = new int[]{6, 5, 4, 3, 2, 1};
System.out.println(Arrays.toString(ar));
sort(ar);
System.out.println(Arrays.toString(ar));
ar = new int[]{};
System.out.println(Arrays.toString(ar));
sort(ar);
System.out.println(Arrays.toString(ar));
ar = new int[]{1};
System.out.println(Arrays.toString(ar));
sort(ar);
System.out.println(Arrays.toString(ar));
}
}