Skip to content

Commit bfc8eef

Browse files
add pancake sort
1 parent 8fcbad0 commit bfc8eef

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

algorithm/category.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@
8585
"quick": "Quicksort",
8686
"radix": "Radix Sort",
8787
"selection": "Selection Sort",
88-
"shell": "Shellsort"
88+
"shell": "Shellsort",
89+
"pancake": "Pancake Sort"
8990
},
9091
"name": "Sorting"
9192
},
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
logger._print('original array = [' + D.join(', ') + ']');
2+
var N = D.length;
3+
function flip (start) {
4+
tracer._select(start, N)._wait();
5+
var idx = 0;
6+
for (var i=start;i<(start+N)/2;i++) {
7+
tracer._select(i)._wait();
8+
var temp = D[i];
9+
D[i] = D[N-idx-1];
10+
D[N-idx-1] = temp;
11+
idx++;
12+
tracer._notify(i, D[i])._notify(N-idx, D[N-idx])._wait();
13+
tracer._denotify(i)._denotify(N-idx);
14+
tracer._deselect(i);
15+
}
16+
tracer._deselect(start, N);
17+
}
18+
for (var i=0;i<N-1;i++) {
19+
logger._print('round ' + (i+1));
20+
var currArr = D.slice(i, N);
21+
var currMax = currArr.reduce((prev, curr, idx) => {
22+
return (curr > prev.val) ? { idx: idx, val: curr} : prev;
23+
}, {idx: 0, val: currArr[0]});
24+
if (currMax.idx !== i) {
25+
logger._print('flip at ' + (currMax.idx+i) + ' (step 1)');
26+
flip(currMax.idx+i, N);
27+
logger._print('flip at ' + (i) + ' (step 2)');
28+
flip(i, N);
29+
}
30+
}
31+
logger._print('sorted array = [' + D.join(', ') + ']');
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
var chart = new ChartTracer();
2+
var tracer = new Array1DTracer().attach(chart);
3+
var logger = new LogTracer();
4+
var D = Array1D.random(10);
5+
tracer._setData(D);

algorithm/sorting/pancake/desc.json

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"Pancake Sort": "Pancake Sort,inspired from sorting a stack of pancake using spatula, is a simple sorting algorithm that only have 1 operation called flip. </br> flip (i) : Reverse array from i to N where N is length of array ",
3+
"Complexity": {
4+
"time": "worst $O(n^2)$",
5+
"space": "worst $O(1)$ auxiliary"
6+
},
7+
"References": [
8+
"<a href='https://en.wikipedia.org/wiki/Pancake_sorting'>Wikipedia</a>",
9+
"<a href='http://www.geeksforgeeks.org/pancake-sorting/'>Geeksforgeeks</a>"
10+
],
11+
"files": {
12+
"basic": "Pancake sort"
13+
}
14+
}

0 commit comments

Comments
 (0)