File tree Expand file tree Collapse file tree 4 files changed +63
-1
lines changed Expand file tree Collapse file tree 4 files changed +63
-1
lines changed Original file line number Diff line number Diff line change 7373 "bucket" : " Bucket Sort" ,
7474 "bubble" : " Bubble Sort" ,
7575 "comb" : " Comb Sort" ,
76- "counting" : " Counting Sort" ,
76+ "counting" : " Counting Sort" ,
7777 "cycle" : " Cycle Sort" ,
7878 "heap" : " Heapsort" ,
7979 "insertion" : " Insertion Sort" ,
8080 "merge" : " Merge Sort" ,
81+ "pigeonhole" : " Pigeonhole Sort" ,
8182 "quick" : " Quicksort" ,
8283 "radix" : " Radix Sort" ,
8384 "selection" : " Selection Sort" ,
Original file line number Diff line number Diff line change 1+ var min = A [ 0 ] ;
2+ var max = A [ 0 ] ;
3+
4+ for ( var i = 1 ; i < N ; i ++ ) {
5+ if ( A [ i ] < min ) {
6+ min = A [ i ] ;
7+ }
8+ if ( A [ i ] > max ) {
9+ max = A [ i ] ;
10+ }
11+ }
12+ var range = max - min + 1 ;
13+
14+ var holes = new Array ( range ) ;
15+ for ( var i = 0 ; i < range ; i ++ ) {
16+ holes [ i ] = [ ] ;
17+ }
18+ tracer2 . _setData ( holes ) ;
19+
20+ logTracer . _print ( 'Filling up holes' ) ;
21+ for ( var i = 0 ; i < N ; i ++ ) {
22+ tracer1 . _select ( i ) . _wait ( ) ;
23+
24+ holes [ A [ i ] - min ] . push ( A [ i ] ) ;
25+
26+ tracer2 . _setData ( holes ) ;
27+ tracer1 . _deselect ( i ) ;
28+ }
29+
30+ logTracer . _print ( 'Building sorted array' ) ;
31+ var k = 0 ;
32+ for ( var i = 0 ; i < range ; i ++ ) {
33+ for ( var j = 0 ; j < holes [ i ] . length ; j ++ ) {
34+ tracer2 . _select ( i , j ) . _wait ( ) ;
35+ A [ k ++ ] = holes [ i ] [ j ] ;
36+ tracer1 . _notify ( k - 1 , A [ k - 1 ] ) . _wait ( ) ;
37+ tracer2 . _deselect ( i , j ) ;
38+ tracer1 . _denotify ( k - 1 ) ;
39+ }
40+ }
41+
42+ logTracer . _print ( 'Sorted array is ' + A ) ;
Original file line number Diff line number Diff line change 1+ var A = Array1D . random ( 7 ) ;
2+ var N = A . length ;
3+
4+ var tracer1 = new Array1DTracer ( 'Array' ) . _setData ( A ) ;
5+ var tracer2 = new Array2DTracer ( 'Holes' ) ;
6+ var logTracer = new LogTracer ( 'Console' ) ;
Original file line number Diff line number Diff line change 1+ {
2+ "Pigeonhole Sort" : " Pigeonhole sorting is a sorting algorithm that is suitable for sorting lists of elements where the number of elements (n) and the number of possible key values (N) are approximately the same." ,
3+ "Complexity" : {
4+ "time" : " O(n + N)" ,
5+ "space" : " O(n)"
6+ },
7+ "References" : [
8+ " <a href='https://en.wikipedia.org/wiki/Pigeonhole_sort'>Wikipedia</a>"
9+ ],
10+ "files" : {
11+ "basic" : " Pigeonhole Sort"
12+ }
13+ }
You can’t perform that action at this time.
0 commit comments