Skip to content

Commit 6eb958f

Browse files
committed
add first iteration of algorithms
1 parent d2711c4 commit 6eb958f

File tree

2 files changed

+107
-9
lines changed

2 files changed

+107
-9
lines changed

public/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<style>
2828
@import url("https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&display=swap");
2929
</style>
30-
<title>React App</title>
30+
<title>Sorting Visualizer</title>
3131
</head>
3232
<body>
3333
<noscript>You need to enable JavaScript to run this app.</noscript>

src/components/ControlPanel.js

+106-8
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ const sortingAlgorithms = [
5555
value: "quick_sort",
5656
label: "Quick Sort",
5757
},
58-
{
59-
value: "heap_sort",
60-
label: "Heap Sort",
61-
},
58+
// {
59+
// value: "heap_sort",
60+
// label: "Heap Sort",
61+
// },
6262
];
6363
function ControlPanel() {
6464
const { numbers, algorithm, isSorting, isComplete } = useSelector(
@@ -73,17 +73,59 @@ function ControlPanel() {
7373
for (let i = 0; i < n - 1; i++) {
7474
for (let j = 0; j < n - 1 - i; j++) {
7575
if (arr[j] > arr[j + 1]) {
76-
await wait();
7776
let temp = arr[j + 1];
7877
arr[j + 1] = arr[j];
7978
arr[j] = temp;
79+
await wait();
8080
let newArr = [...arr];
8181
dispatch(setNumbers(newArr));
8282
}
8383
}
8484
}
8585
}
8686

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+
87129
async function merge(arr, s, e) {
88130
let mid = Math.floor((s + e) / 2);
89131
let i = s;
@@ -143,17 +185,65 @@ function ControlPanel() {
143185
await mergeSort(arr, 0, n - 1);
144186
}
145187

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+
146226
async function sort() {
147227
if (isSorting || isComplete) return;
148228
if (algorithm === "bubble_sort") {
149229
dispatch(setSorting());
150230
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();
152239
dispatch(setComplete());
153240
} else if (algorithm === "merge_sort") {
154241
dispatch(setSorting());
155242
await mergeSortWrapper();
156-
console.log("Here....");
243+
dispatch(setComplete());
244+
} else if (algorithm === "quick_sort") {
245+
dispatch(setSorting());
246+
await quickSortWrapper();
157247
dispatch(setComplete());
158248
}
159249
}
@@ -162,7 +252,15 @@ function ControlPanel() {
162252
return new Promise((resolve, reject) => {
163253
setInterval(() => {
164254
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);
166264
});
167265
}
168266

0 commit comments

Comments
 (0)