@@ -19,12 +19,10 @@ function startMergeSort() {
19
19
checkIfAlreadyRunning ( ) ;
20
20
copyArray = returnArray ( ) ;
21
21
mergesort ( copyArray ) ;
22
- control . setColorInArrayElements ( copyArray , 3 , true ) ;
23
22
}
24
23
function mergesort ( array ) {
25
24
if ( array . length < 2 ) {
26
25
pivotHelper ( array [ 0 ] ) ;
27
- //control.deselectPivotElement(array[0]);
28
26
return array ;
29
27
}
30
28
else {
@@ -38,30 +36,37 @@ function mergesort(array) {
38
36
control . setPivotElement ( right [ 0 ] ) ;
39
37
pivotElements [ pivCount ] = right [ 0 ] ;
40
38
pivCount ++ ;
41
- control . setColorInArrayElements ( left , 1 , true ) ;
42
- control . setColorInArrayElements ( right , 2 , true ) ;
39
+ control . setColorInArrayElements ( left , 1 ) ;
40
+ control . setColorInArrayElements ( right , 2 ) ;
43
41
control . lowerElements ( left ) ;
44
42
control . lowerElements ( right ) ;
45
- control . setColorInArrayElements ( array , 1 , false ) ;
43
+ control . setColorInArrayElements ( left , 4 ) ;
44
+ control . setColorInArrayElements ( right , 4 ) ;
46
45
//Split until there is only 1 element left
47
46
return merge ( mergesort ( left ) , mergesort ( right ) ) ;
48
47
}
49
48
}
50
49
function merge ( left , right ) {
51
50
var result = [ ] ;
52
51
var testing = copyArray . slice ( 0 ) ;
52
+ var workingNumbers = left . concat ( right ) ;
53
53
control . setPivotElement ( right [ 0 ] ) ;
54
54
pivotElements [ pivCount ] = right [ 0 ] ;
55
55
pivCount ++ ;
56
56
var tempLeftIndex = 0 ;
57
57
var tempRightIndex = 0 ;
58
58
var counter = copyArray . indexOf ( left [ 0 ] ) ;
59
+ var leftAlreadyColored = false ;
59
60
while ( tempLeftIndex < left . length && tempRightIndex < right . length ) {
60
61
//Compare the elements from each array
61
- control . setColorInArrayElement ( left [ tempLeftIndex ] , 0 , true ) ;
62
- control . setColorInArrayElement ( right [ tempRightIndex ] , 0 , true ) ;
62
+ if ( ! leftAlreadyColored ) {
63
+ control . setColorInArrayElement ( left [ tempLeftIndex ] , 0 ) ;
64
+ leftAlreadyColored = true ;
65
+ }
66
+ control . setColorInArrayElement ( right [ tempRightIndex ] , 0 ) ;
63
67
if ( left [ tempLeftIndex ] < right [ tempRightIndex ] ) {
64
- control . setColorInArrayElement ( left [ tempLeftIndex ] , 3 , true ) ;
68
+ leftAlreadyColored = false ;
69
+ control . setColorInArrayElement ( left [ tempLeftIndex ] , 3 ) ;
65
70
control . moveElementToPlace ( left [ tempLeftIndex ] , counter , copyArray . indexOf ( left [ tempLeftIndex ] ) ) ;
66
71
result . push ( left [ tempLeftIndex ] ) ;
67
72
testing [ counter ] = left [ tempLeftIndex ] ;
@@ -70,48 +75,47 @@ function merge(left, right) {
70
75
}
71
76
else {
72
77
pivotHelper ( right [ 0 ] ) ;
73
- control . setColorInArrayElement ( right [ tempRightIndex ] , 3 , true ) ;
78
+ control . setColorInArrayElement ( right [ tempRightIndex ] , 3 ) ;
74
79
control . moveElementToPlace ( right [ tempRightIndex ] , counter , copyArray . indexOf ( right [ tempRightIndex ] ) ) ;
75
80
result . push ( right [ tempRightIndex ] ) ;
76
81
testing [ counter ] = right [ tempRightIndex ] ;
77
82
counter ++ ;
78
83
tempRightIndex ++ ;
79
84
}
80
85
}
81
- if ( right . slice ( tempRightIndex ) . length > 0 ) {
82
- pivotHelper ( right [ 0 ] ) ;
83
- var moreRight = right . slice ( tempRightIndex ) ;
84
- control . setColorInArrayElements ( moreRight , 3 , true ) ;
86
+ if ( left . slice ( tempLeftIndex ) . length > 0 ) {
87
+ var moreLeft = left . slice ( tempLeftIndex ) ;
88
+ control . setColorInArrayElements ( moreLeft , 3 ) ;
85
89
var elems = [ ] ;
86
90
var count = [ ] ;
87
91
var back = [ ] ;
88
- for ( var i = 0 ; i < moreRight . length ; i ++ ) {
89
- elems [ i ] = moreRight [ i ] ;
92
+ for ( var i = 0 ; i < moreLeft . length ; i ++ ) {
93
+ elems [ i ] = moreLeft [ i ] ;
90
94
count [ i ] = counter ;
91
- back [ i ] = copyArray . indexOf ( moreRight [ i ] ) ;
92
- testing [ counter ] = moreRight [ i ] ;
95
+ back [ i ] = copyArray . indexOf ( moreLeft [ i ] ) ;
96
+ testing [ counter ] = moreLeft [ i ] ;
93
97
counter ++ ;
94
98
}
95
99
control . moveElementsToPlace ( elems , count , back ) ;
96
100
}
97
- if ( left . slice ( tempLeftIndex ) . length > 0 ) {
98
- var moreLeft = left . slice ( tempLeftIndex ) ;
99
- control . setColorInArrayElements ( moreLeft , 3 , true ) ;
101
+ if ( right . slice ( tempRightIndex ) . length > 0 ) {
102
+ pivotHelper ( right [ 0 ] ) ;
103
+ var moreRight = right . slice ( tempRightIndex ) ;
104
+ control . setColorInArrayElements ( moreRight , 3 ) ;
100
105
var elems = [ ] ;
101
106
var count = [ ] ;
102
107
var back = [ ] ;
103
- for ( var i = 0 ; i < moreLeft . length ; i ++ ) {
104
- elems [ i ] = moreLeft [ i ] ;
108
+ for ( var i = 0 ; i < moreRight . length ; i ++ ) {
109
+ elems [ i ] = moreRight [ i ] ;
105
110
count [ i ] = counter ;
106
- back [ i ] = copyArray . indexOf ( moreLeft [ i ] ) ;
107
- testing [ counter ] = moreLeft [ i ] ;
111
+ back [ i ] = copyArray . indexOf ( moreRight [ i ] ) ;
112
+ testing [ counter ] = moreRight [ i ] ;
108
113
counter ++ ;
109
114
}
110
115
control . moveElementsToPlace ( elems , count , back ) ;
111
116
}
112
- pivotHelper ( right [ 0 ] ) ;
113
117
copyArray = testing . slice ( 0 ) ;
114
- control . setColorInArrayElements ( testing , 3 , false ) ;
118
+ control . setColorInArrayElements ( workingNumbers , 4 ) ;
115
119
return result . concat ( left . slice ( tempLeftIndex ) ) . concat ( right . slice ( tempRightIndex ) ) ;
116
120
}
117
121
function pivotHelper ( number ) {
0 commit comments