TheAlgorithms/C++ 1.0.0
All the 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:

Go to the source code of this file.

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

Definition in file pancake_sort.cpp.

Function Documentation

◆ main()

int main ( void )

Main function.

Returns
0 on exit

Definition at line 128 of file pancake_sort.cpp.

128 {
129 test();
130 return 0;
131}
static void test()
Test implementations.

◆ 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

Definition at line 61 of file pancake_sort.cpp.

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}

◆ 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

Definition at line 43 of file pancake_sort.cpp.

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}

◆ test()

static void test ( )
static

Test implementations.

Returns
void

Definition at line 86 of file pancake_sort.cpp.

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 }
97 std::cout << std::endl;
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 }
110 std::cout << std::endl;
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 }
122 std::cout << std::endl;
123}
int pancakeSort(std::vector< T > &arr, int size)
This implementation is for a C-style array input that gets modified in place.