1
+ async function merge ( ele , low , mid , high ) {
2
+ console . log ( 'In merge()' ) ;
3
+ console . log ( `low=${ low } , mid=${ mid } , high=${ high } ` ) ;
4
+ const n1 = mid - low + 1 ;
5
+ const n2 = high - mid ;
6
+ console . log ( `n1=${ n1 } , n2=${ n2 } ` ) ;
7
+ let left = new Array ( n1 ) ;
8
+ let right = new Array ( n2 ) ;
9
+
10
+ for ( let i = 0 ; i < n1 ; i ++ ) {
11
+ await waitforme ( delay ) ;
12
+ console . log ( 'In merge left loop' ) ;
13
+ console . log ( ele [ low + i ] . style . height + ' at ' + ( low + i ) ) ;
14
+ // color
15
+ ele [ low + i ] . style . background = 'orange' ;
16
+ left [ i ] = ele [ low + i ] . style . height ;
17
+ }
18
+ for ( let i = 0 ; i < n2 ; i ++ ) {
19
+ await waitforme ( delay ) ;
20
+ console . log ( 'In merge right loop' ) ;
21
+ console . log ( ele [ mid + 1 + i ] . style . height + ' at ' + ( mid + 1 + i ) ) ;
22
+ // color
23
+ ele [ mid + 1 + i ] . style . background = 'yellow' ;
24
+ right [ i ] = ele [ mid + 1 + i ] . style . height ;
25
+ }
26
+ await waitforme ( delay ) ;
27
+ let i = 0 , j = 0 , k = low ;
28
+ while ( i < n1 && j < n2 ) {
29
+ await waitforme ( delay ) ;
30
+ console . log ( 'In merge while loop' ) ;
31
+ console . log ( parseInt ( left [ i ] ) , parseInt ( right [ j ] ) ) ;
32
+
33
+ // To add color for which two r being compared for merging
34
+
35
+ if ( parseInt ( left [ i ] ) <= parseInt ( right [ j ] ) ) {
36
+ console . log ( 'In merge while loop if' ) ;
37
+ // color
38
+ if ( ( n1 + n2 ) === ele . length ) {
39
+ ele [ k ] . style . background = 'green' ;
40
+ }
41
+ else {
42
+ ele [ k ] . style . background = 'lightgreen' ;
43
+ }
44
+
45
+ ele [ k ] . style . height = left [ i ] ;
46
+ i ++ ;
47
+ k ++ ;
48
+ }
49
+ else {
50
+ console . log ( 'In merge while loop else' ) ;
51
+ // color
52
+ if ( ( n1 + n2 ) === ele . length ) {
53
+ ele [ k ] . style . background = 'green' ;
54
+ }
55
+ else {
56
+ ele [ k ] . style . background = 'lightgreen' ;
57
+ }
58
+ ele [ k ] . style . height = right [ j ] ;
59
+ j ++ ;
60
+ k ++ ;
61
+ }
62
+ }
63
+ while ( i < n1 ) {
64
+ await waitforme ( delay ) ;
65
+ console . log ( "In while if n1 is left" ) ;
66
+ // color
67
+ if ( ( n1 + n2 ) === ele . length ) {
68
+ ele [ k ] . style . background = 'green' ;
69
+ }
70
+ else {
71
+ ele [ k ] . style . background = 'lightgreen' ;
72
+ }
73
+ ele [ k ] . style . height = left [ i ] ;
74
+ i ++ ;
75
+ k ++ ;
76
+ }
77
+ while ( j < n2 ) {
78
+ await waitforme ( delay ) ;
79
+ console . log ( "In while if n2 is left" ) ;
80
+ // color
81
+ if ( ( n1 + n2 ) === ele . length ) {
82
+ ele [ k ] . style . background = 'green' ;
83
+ }
84
+ else {
85
+ ele [ k ] . style . background = 'lightgreen' ;
86
+ }
87
+ ele [ k ] . style . height = right [ j ] ;
88
+ j ++ ;
89
+ k ++ ;
90
+ }
91
+ }
92
+
93
+ async function mergeSort ( ele , l , r ) {
94
+ console . log ( 'In mergeSort()' ) ;
95
+ if ( l >= r ) {
96
+ console . log ( `return cause just 1 elemment l=${ l } , r=${ r } ` ) ;
97
+ return ;
98
+ }
99
+ const m = l + Math . floor ( ( r - l ) / 2 ) ;
100
+ console . log ( `left=${ l } mid=${ m } right=${ r } ` , typeof ( m ) ) ;
101
+ await mergeSort ( ele , l , m ) ;
102
+ await mergeSort ( ele , m + 1 , r ) ;
103
+ await merge ( ele , l , m , r ) ;
104
+ }
105
+
106
+ const mergeSortbtn = document . querySelector ( ".mergeSort" ) ;
107
+ mergeSortbtn . addEventListener ( 'click' , async function ( ) {
108
+ let ele = document . querySelectorAll ( '.bar' ) ;
109
+ let l = 0 ;
110
+ let r = parseInt ( ele . length ) - 1 ;
111
+ disableSortingBtn ( ) ;
112
+ disableSizeSlider ( ) ;
113
+ disableNewArrayBtn ( ) ;
114
+ await mergeSort ( ele , l , r ) ;
115
+ enableSortingBtn ( ) ;
116
+ enableSizeSlider ( ) ;
117
+ enableNewArrayBtn ( ) ;
118
+ } ) ;
0 commit comments