@@ -55,10 +55,10 @@ const sortingAlgorithms = [
55
55
value : "quick_sort" ,
56
56
label : "Quick Sort" ,
57
57
} ,
58
- {
59
- value : "heap_sort" ,
60
- label : "Heap Sort" ,
61
- } ,
58
+ // {
59
+ // value: "heap_sort",
60
+ // label: "Heap Sort",
61
+ // },
62
62
] ;
63
63
function ControlPanel ( ) {
64
64
const { numbers, algorithm, isSorting, isComplete } = useSelector (
@@ -73,17 +73,59 @@ function ControlPanel() {
73
73
for ( let i = 0 ; i < n - 1 ; i ++ ) {
74
74
for ( let j = 0 ; j < n - 1 - i ; j ++ ) {
75
75
if ( arr [ j ] > arr [ j + 1 ] ) {
76
- await wait ( ) ;
77
76
let temp = arr [ j + 1 ] ;
78
77
arr [ j + 1 ] = arr [ j ] ;
79
78
arr [ j ] = temp ;
79
+ await wait ( ) ;
80
80
let newArr = [ ...arr ] ;
81
81
dispatch ( setNumbers ( newArr ) ) ;
82
82
}
83
83
}
84
84
}
85
85
}
86
86
87
+ async function insertionSort ( ) {
88
+ let arr = [ ...numbers ] ;
89
+ let n = arr . length ;
90
+
91
+ for ( let i = 1 ; i <= n ; i ++ ) {
92
+ let current = arr [ i ] ;
93
+ let prev = i - 1 ;
94
+
95
+ while ( prev >= 0 && current < arr [ prev ] ) {
96
+ arr [ prev + 1 ] = arr [ prev ] ;
97
+ prev -- ;
98
+ await wait ( ) ;
99
+ let newArr = [ ...arr ] ;
100
+ dispatch ( setNumbers ( newArr ) ) ;
101
+ }
102
+
103
+ arr [ prev + 1 ] = current ;
104
+ let newArr = [ ...arr ] ;
105
+ await wait ( ) ;
106
+ dispatch ( setNumbers ( newArr ) ) ;
107
+ }
108
+ }
109
+
110
+ async function selectionSort ( ) {
111
+ let arr = [ ...numbers ] ;
112
+ let n = arr . length ;
113
+
114
+ for ( let i = 0 ; i < n - 1 ; i ++ ) {
115
+ let min_pos = i ;
116
+ for ( let j = i + 1 ; j < n ; j ++ ) {
117
+ if ( arr [ j ] < arr [ min_pos ] ) {
118
+ min_pos = j ;
119
+ }
120
+ }
121
+
122
+ [ arr [ i ] , arr [ min_pos ] ] = [ arr [ min_pos ] , arr [ i ] ] ;
123
+ await longWait ( ) ;
124
+ let newArr = [ ...arr ] ;
125
+ dispatch ( setNumbers ( newArr ) ) ;
126
+ }
127
+ }
128
+
87
129
async function merge ( arr , s , e ) {
88
130
let mid = Math . floor ( ( s + e ) / 2 ) ;
89
131
let i = s ;
@@ -143,17 +185,65 @@ function ControlPanel() {
143
185
await mergeSort ( arr , 0 , n - 1 ) ;
144
186
}
145
187
188
+ async function partiton ( arr , s , e ) {
189
+ let i = s - 1 ;
190
+ let pivot = arr [ e ] ;
191
+
192
+ for ( let j = s ; j < e ; j ++ ) {
193
+ if ( pivot > arr [ j ] ) {
194
+ [ arr [ i + 1 ] , arr [ j ] ] = [ arr [ j ] , arr [ i + 1 ] ] ;
195
+ i ++ ;
196
+ await wait ( ) ;
197
+ let newArr = [ ...arr ] ;
198
+ dispatch ( setNumbers ( newArr ) ) ;
199
+ }
200
+ }
201
+
202
+ [ arr [ i + 1 ] , arr [ e ] ] = [ arr [ e ] , arr [ i + 1 ] ] ;
203
+ await wait ( ) ;
204
+ let newArr = [ ...arr ] ;
205
+ dispatch ( setNumbers ( newArr ) ) ;
206
+ return i + 1 ;
207
+ }
208
+
209
+ async function quickSort ( arr , s , e ) {
210
+ if ( s >= e ) {
211
+ return ;
212
+ }
213
+
214
+ let p = await partiton ( arr , s , e ) ;
215
+ await quickSort ( arr , s , p - 1 ) ;
216
+ await quickSort ( arr , p + 1 , e ) ;
217
+ }
218
+
219
+ async function quickSortWrapper ( ) {
220
+ let arr = [ ...numbers ] ;
221
+ let n = arr . length ;
222
+
223
+ await quickSort ( arr , 0 , n - 1 ) ;
224
+ }
225
+
146
226
async function sort ( ) {
147
227
if ( isSorting || isComplete ) return ;
148
228
if ( algorithm === "bubble_sort" ) {
149
229
dispatch ( setSorting ( ) ) ;
150
230
await bubbleSort ( ) ;
151
- console . log ( "Here...." ) ;
231
+ dispatch ( setComplete ( ) ) ;
232
+ } else if ( algorithm === "insertion_sort" ) {
233
+ dispatch ( setSorting ( ) ) ;
234
+ await insertionSort ( ) ;
235
+ dispatch ( setComplete ( ) ) ;
236
+ } else if ( algorithm === "selection_sort" ) {
237
+ dispatch ( setSorting ( ) ) ;
238
+ await selectionSort ( ) ;
152
239
dispatch ( setComplete ( ) ) ;
153
240
} else if ( algorithm === "merge_sort" ) {
154
241
dispatch ( setSorting ( ) ) ;
155
242
await mergeSortWrapper ( ) ;
156
- console . log ( "Here...." ) ;
243
+ dispatch ( setComplete ( ) ) ;
244
+ } else if ( algorithm === "quick_sort" ) {
245
+ dispatch ( setSorting ( ) ) ;
246
+ await quickSortWrapper ( ) ;
157
247
dispatch ( setComplete ( ) ) ;
158
248
}
159
249
}
@@ -162,7 +252,15 @@ function ControlPanel() {
162
252
return new Promise ( ( resolve , reject ) => {
163
253
setInterval ( ( ) => {
164
254
resolve ( true ) ;
165
- } , 10 ) ;
255
+ } , 5 ) ;
256
+ } ) ;
257
+ }
258
+
259
+ async function longWait ( ) {
260
+ return new Promise ( ( resolve , reject ) => {
261
+ setInterval ( ( ) => {
262
+ resolve ( true ) ;
263
+ } , 100 ) ;
166
264
} ) ;
167
265
}
168
266
0 commit comments