Algorithms_in_C++ 1.0.0
Set of algorithms implemented in C++.
Loading...
Searching...
No Matches
pancake_sort.cpp File Reference

pancake sort sorts a disordered stack of pancakes by flipping any number of pancakes using a spatula using minimum number of flips. More...

#include <algorithm>
#include <cassert>
#include <iostream>
#include <vector>
Include dependency graph for pancake_sort.cpp:

Namespaces

namespace  sorting
 for working with vectors
 
namespace  pancake_sort
 Functions for Pancake sort algorithm.
 

Functions

template<typename T >
void sorting::pancake_sort::reverse (std::vector< T > &arr, int start, int end)
 This implementation is for reversing elements in a a C-style array .
 
template<typename T >
int sorting::pancake_sort::pancakeSort (std::vector< T > &arr, int size)
 This implementation is for a C-style array input that gets modified in place.
 
static void test ()
 Test implementations.
 
int main ()
 Main function.
 

Detailed Description

pancake sort sorts a disordered stack of pancakes by flipping any number of pancakes using a spatula using minimum number of flips.

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. Overall time complexity of pancake sort is O(n^2) For example: example 1:- Disordered pancake sizes: {2,5,3,7,8} Sorted: {2,3,5,7,8} For example: example 2:- Disordered pancake sizes: {22,51,37,73,81} Sorted: {22,37,51,73,81}

Author
Divyansh Gupta
See also
more on Pancake sort
related problem at Leetcode

Function Documentation

◆ main()

int main ( void )

Main function.

Returns
0 on exit
128 {
129 test();
130 return 0;
131}
static void test()
Test implementations.
Definition pancake_sort.cpp:86
Here is the call graph for this function:

◆ pancakeSort()

template<typename T >
int sorting::pancake_sort::pancakeSort ( std::vector< T > & arr,
int size )

This implementation is for a C-style array input that gets modified in place.

Parameters
[start,end]arr our vector of elements.
sizesize of given array
Returns
0 on exit
61 {
62 for (int i = size; i > 1; --i) {
63 int max_index = 0, j = 0; // intialize some variables.
64 T max_value = 0;
65 for (j = 0; j < i; j++) {
66 if (arr[j] >= max_value) {
67 max_value = arr[j];
68 max_index = j;
69 }
70 }
71 if (max_index != i - 1) // check for reversing
72 {
73 reverse(arr, 0, max_index);
74 reverse(arr, 0, i - 1);
75 }
76 }
77 return 0;
78}
T reverse(T... args)
Here is the call graph for this function:

◆ reverse()

template<typename T >
void sorting::pancake_sort::reverse ( std::vector< T > & arr,
int start,
int end )

This implementation is for reversing elements in a a C-style array .

Parameters
[start,end]arr our vector of elements.
startstarting index of array
endending index of array
Returns
void
43 {
44 T temp; // Temporary variable
45 while (start <= end) {
46 temp = arr[start];
47 arr[start] = arr[end];
48 arr[end] = temp;
49 start++;
50 end--;
51 }
52}
T end(T... args)

◆ test()

static void test ( )
static

Test implementations.

Returns
void
86 {
87 // example 1: vector of int
88 const int size1 = 7;
89 std::cout << "\nTest 1- as std::vector<int>...";
90 std::vector<int> arr1 = {23, 10, 20, 11, 12, 6, 7};
92 assert(std::is_sorted(arr1.begin(), arr1.end()));
93 std::cout << "Passed\n";
94 for (int i = 0; i < size1; i++) {
95 std::cout << arr1[i] << " ,";
96 }
98
99 // example 2: vector of double
100 const int size2 = 8;
101 std::cout << "\nTest 2- as std::vector<double>...";
102 std::vector<double> arr2 = {23.56, 10.62, 200.78, 111.484,
103 3.9, 1.2, 61.77, 79.6};
105 assert(std::is_sorted(arr2.begin(), arr2.end()));
106 std::cout << "Passed\n";
107 for (int i = 0; i < size2; i++) {
108 std::cout << arr2[i] << ", ";
109 }
111
112 // example 3:vector of float
113 const int size3 = 7;
114 std::cout << "\nTest 3- as std::vector<float>...";
115 std::vector<float> arr3 = {6.56, 12.62, 200.78, 768.484, 19.27, 68.87, 9.6};
117 assert(std::is_sorted(arr3.begin(), arr3.end()));
118 std::cout << "Passed\n";
119 for (int i = 0; i < size3; i++) {
120 std::cout << arr3[i] << ", ";
121 }
123}
T begin(T... args)
T endl(T... args)
T is_sorted(T... args)
int pancakeSort(std::vector< T > &arr, int size)
This implementation is for a C-style array input that gets modified in place.
Definition pancake_sort.cpp:61
Here is the call graph for this function: