@@ -10,6 +10,8 @@ let n: number = 10;
1010
1111let sortArray : number [ ] = [ ] ;
1212let copyArray : number [ ] = [ ] ;
13+ let pivotElements : number [ ] = [ ] ;
14+ let pivCount : number = 0 ;
1315let running = true ;
1416
1517function checkIfAlreadyRunning ( ) {
@@ -27,8 +29,10 @@ function startMergeSort() {
2729
2830function mergesort ( array : number [ ] ) : any {
2931 if ( array . length < 2 ) {
30- //denne er ekkel
31- control . deselectPivotElement ( array [ 0 ] ) ;
32+ pivotHelper ( array [ 0 ] ) ;
33+
34+ //control.deselectPivotElement(array[0]);
35+
3236 return array ;
3337
3438 } else {
@@ -43,6 +47,8 @@ function mergesort(array: number[]): any {
4347
4448 //denne og er ekkel
4549 control . setPivotElement ( right [ 0 ] ) ;
50+ pivotElements [ pivCount ] = right [ 0 ] ;
51+ pivCount ++ ;
4652
4753 control . setColorInArrayElements ( left , 1 , true ) ;
4854 control . setColorInArrayElements ( right , 2 , true ) ;
@@ -60,6 +66,9 @@ function mergesort(array: number[]): any {
6066function merge ( left : number [ ] , right : number [ ] ) {
6167 let result : number [ ] = [ ] ;
6268 let testing : number [ ] = copyArray . slice ( 0 ) ;
69+ control . setPivotElement ( right [ 0 ] ) ;
70+ pivotElements [ pivCount ] = right [ 0 ] ;
71+ pivCount ++ ;
6372
6473 let tempLeftIndex : number = 0 ;
6574 let tempRightIndex : number = 0 ;
@@ -81,6 +90,7 @@ function merge(left: number[], right: number[]) {
8190 tempLeftIndex ++ ;
8291
8392 } else {
93+ pivotHelper ( right [ 0 ] ) ;
8494 control . setColorInArrayElement ( right [ tempRightIndex ] , 3 , true ) ;
8595 control . moveElementToPlace ( right [ tempRightIndex ] , counter , copyArray . indexOf ( right [ tempRightIndex ] ) ) ;
8696
@@ -93,30 +103,60 @@ function merge(left: number[], right: number[]) {
93103 }
94104
95105 if ( right . slice ( tempRightIndex ) . length > 0 ) {
106+ pivotHelper ( right [ 0 ] ) ;
96107 let moreRight = right . slice ( tempRightIndex ) ;
97108 control . setColorInArrayElements ( moreRight , 3 , true ) ;
109+ let elems : number [ ] = [ ] ;
110+ let count : number [ ] = [ ] ;
111+ let back : number [ ] = [ ] ;
112+
98113 for ( let i = 0 ; i < moreRight . length ; i ++ ) {
99- control . moveElementToPlace ( moreRight [ i ] , counter , copyArray . indexOf ( moreRight [ i ] ) ) ;
114+ elems [ i ] = moreRight [ i ] ;
115+ count [ i ] = counter ;
116+ back [ i ] = copyArray . indexOf ( moreRight [ i ] ) ;
100117
101118 testing [ counter ] = moreRight [ i ] ;
102119 counter ++ ;
103120 }
121+ control . moveElementsToPlace ( elems , count , back ) ;
104122 }
105123 if ( left . slice ( tempLeftIndex ) . length > 0 ) {
106124 let moreLeft = left . slice ( tempLeftIndex ) ;
107125 control . setColorInArrayElements ( moreLeft , 3 , true ) ;
126+ let elems : number [ ] = [ ] ;
127+ let count : number [ ] = [ ] ;
128+ let back : number [ ] = [ ] ;
129+
108130 for ( let i = 0 ; i < moreLeft . length ; i ++ ) {
109- control . moveElementToPlace ( moreLeft [ i ] , counter , copyArray . indexOf ( moreLeft [ i ] ) ) ;
131+ elems [ i ] = moreLeft [ i ] ;
132+ count [ i ] = counter ;
133+ back [ i ] = copyArray . indexOf ( moreLeft [ i ] ) ;
110134
111135 testing [ counter ] = moreLeft [ i ] ;
112136 counter ++ ;
113137 }
138+ control . moveElementsToPlace ( elems , count , back ) ;
114139 }
140+
141+ pivotHelper ( right [ 0 ] ) ;
142+
115143 copyArray = testing . slice ( 0 ) ;
116144 control . setColorInArrayElements ( testing , 3 , false ) ;
117145 return result . concat ( left . slice ( tempLeftIndex ) ) . concat ( right . slice ( tempRightIndex ) ) ;
118146}
119147
148+ function pivotHelper ( number : number ) {
149+ for ( let i = 0 ; i < pivotElements . length ; i ++ ) {
150+ if ( pivotElements [ i ] == number ) {
151+ pivotElements = pivotElements . filter ( function ( item ) {
152+ return item !== number ;
153+ } )
154+ pivCount -- ;
155+ control . deselectPivotElement ( number ) ;
156+ }
157+ }
158+ }
159+
120160function setRandomMyArray ( ) {
121161 for ( let i : number = 0 ; i < n ; i ++ ) {
122162 sortArray [ i ] = randomInt ( 0 , 99 ) ;
0 commit comments