1
+ /*
1
2
2
- /*
3
-
4
3
* JS program for bitonic sort
5
4
* Bitonic Sort is a parallel sorting algorithm that works by dividing the
6
5
array into two parts, recursively sorting them, and then merging them in a
7
- specific way.
6
+ specific way.
8
7
* more information: https://en.wikipedia.org/wiki/Bitonic_sorter
9
-
8
+
10
9
*/
11
- function compAndSwap ( a , i , j , order ) {
12
- if ( ( a [ i ] > a [ j ] && order === 1 ) ||
13
- ( a [ i ] < a [ j ] && order === 0 ) )
14
- {
15
- // Swapping elements
16
- var temp = a [ i ] ;
17
- a [ i ] = a [ j ] ;
18
- a [ j ] = temp ;
19
- }
20
- }
10
+ function compAndSwap ( a , i , j , order ) {
11
+ if ( ( a [ i ] > a [ j ] && order === 1 ) || ( a [ i ] < a [ j ] && order === 0 ) ) {
12
+ // Swapping elements
13
+ const temp = a [ i ]
14
+ a [ i ] = a [ j ]
15
+ a [ j ] = temp
16
+ }
17
+ }
21
18
22
- // It recursively sorts a bitonic sequence in ascending
23
- //order, if order = 1
24
- function bitonicMergeArr ( a , low , cnt , dir ) {
25
- if ( cnt > 1 ) {
26
- var k = parseInt ( cnt / 2 ) ;
27
- for ( var i = low ; i < low + k ; i ++ )
28
- compAndSwap ( a , i , i + k , dir ) ;
29
- bitonicMergeArr ( a , low , k , dir ) ;
30
- bitonicMergeArr ( a , low + k , k , dir ) ;
31
- }
32
- }
19
+ // It recursively sorts a bitonic sequence in ascending
20
+ // order, if order = 1
21
+ function bitonicMergeArr ( a , low , cnt , dir ) {
22
+ if ( cnt > 1 ) {
23
+ const k = parseInt ( cnt / 2 )
24
+ for ( let i = low ; i < low + k ; i ++ ) { compAndSwap ( a , i , i + k , dir ) }
25
+ bitonicMergeArr ( a , low , k , dir )
26
+ bitonicMergeArr ( a , low + k , k , dir )
27
+ }
28
+ }
33
29
34
- function bitonicSort ( a , low , cnt , order ) { // (arr 0 arrLen AS-Ds-order)
35
- if ( cnt > 1 ) {
36
- var k = parseInt ( cnt / 2 ) ;
30
+ function bitonicSort ( a , low , cnt , order ) { // (arr 0 arrLen AS-Ds-order)
31
+ if ( cnt > 1 ) {
32
+ const k = parseInt ( cnt / 2 )
37
33
38
- // sort in ascending order since order here is 1
39
- bitonicSort ( a , low , k , 1 ) ;
34
+ // sort in ascending order since order here is 1
35
+ bitonicSort ( a , low , k , 1 )
40
36
41
- // sort in descending order since order here is 0
42
- bitonicSort ( a , low + k , k , 0 ) ;
37
+ // sort in descending order since order here is 0
38
+ bitonicSort ( a , low + k , k , 0 )
43
39
44
- // Will merge whole sequence in ascending order
45
- // since dir=1.
46
- bitonicMergeArr ( a , low , cnt , order ) ;
47
- }
48
- }
40
+ // Will merge whole sequence in ascending order
41
+ // since dir=1.
42
+ bitonicMergeArr ( a , low , cnt , order )
43
+ }
44
+ }
49
45
50
- // Calling of bitonicSort func for sorting the entire array
51
- // of length N in ASCENDING order
52
- // here up=1 for ASCENDING & up=0 for DESCENDING
53
- function sort ( a , N , up ) {
54
- bitonicSort ( a , 0 , N , up ) ;
55
- }
46
+ // Calling of bitonicSort func for sorting the entire array
47
+ // of length N in ASCENDING order
48
+ // here up=1 for ASCENDING & up=0 for DESCENDING
49
+ function sort ( a , N , up ) {
50
+ bitonicSort ( a , 0 , N , up )
51
+ }
56
52
57
- //displaying array
58
- function logArray ( arr ) {
59
- for ( var i = 0 ; i < arr . length ; ++ i )
60
- console . log ( arr [ i ] + " " ) ;
61
- }
53
+ // displaying array
54
+ function logArray ( arr ) {
55
+ for ( let i = 0 ; i < arr . length ; ++ i ) { console . log ( arr [ i ] + ' ' ) }
56
+ }
62
57
63
- export { sort }
58
+ export { sort }
64
59
65
- // Test Case method
66
- // var a = [4, 16, 8, 0, 100];
67
- // var up = 1; // change to 0 for Descending
68
- // sort(a, a.length, up);
69
- // console.log(" Sorted array: ");
70
- // logArray(a);
60
+ // Test Case method
61
+ const a = [ 4 , 16 , 8 , 0 , 100 ]
62
+ const up = 1 // change to 0 for Descending
63
+ sort ( a , a . length , up )
64
+ console . log ( ' Sorted array: ' )
65
+ logArray ( a )
71
66
72
- /** Output:
73
- * Sorted array:
74
- 0
75
- 4
76
- 8
77
- 16
78
- 100
67
+ /** Output:
68
+ * Sorted array:
69
+ 0
70
+ 4
71
+ 8
72
+ 16
73
+ 100
79
74
*/
80
-
0 commit comments