-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathselectionSort.js
More file actions
73 lines (71 loc) · 2.41 KB
/
selectionSort.js
File metadata and controls
73 lines (71 loc) · 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import {
numberArray,
syncTimeout,
clearTopContainer,
color1 as colorRed,
color2 as colorGreen,
drawBarEnd,
} from "./script.js";
/* Selection Sort
In jeder Runde wird über das array iteriert, immer das aktuell höchste Element wird dabei rot gefärbt. Das Element, dass gerade mit dem aktuell
höchsten Element verglichen wird, wird dabei blau gefärbt.
Wurde das array durchiteriert, wird das rot gefärbte Element mit dem letzen Element der Runde vertauscht. Die Elemente die getauscht werden,
färben sich zunächst orange und nach dem tauschen grün. In der ersten Runde wird über das komplette array iteriert. In der zweiten Runde wird das
array bis zum vorletzen Element iteriert usw. Bis alle Elemente sortiert sind.
*/
let colorSwitch = false;
export async function selectionSort() {
for (let i = 0; i < numberArray.length; i++) {
let iterate = 0;
let max = 0;
let maxIndex = 0;
while (iterate < numberArray.length - i) {
// update current highest element
if (numberArray[iterate] > max) {
max = numberArray[iterate];
maxIndex = iterate;
}
if (numberArray[iterate] > numberArray[iterate + 1]) {
colorSwitch = true;
}
await syncTimeout();
clearTopContainer();
drawBarSS(maxIndex, iterate, "red");
iterate++;
}
// swap elements
clearTopContainer();
drawBarSS(maxIndex, numberArray.length - 1 - i, "orange");
await syncTimeout();
let swapNum = numberArray[numberArray.length - 1 - i];
numberArray[maxIndex] = swapNum;
numberArray[numberArray.length - 1 - i] = max;
clearTopContainer();
drawBarSS(maxIndex, numberArray.length - 1 - i, "green");
await syncTimeout();
if (i == numberArray.length - 1) {
clearTopContainer();
drawBarEnd();
}
}
}
function drawBarSS(currentMax, i, color) {
for (let b = 0; b < numberArray.length; b++) {
var para = document.createElement("div");
para.className = "bar";
if (b == currentMax) {
para.style.backgroundColor = color;
}
if (b == i && colorSwitch && currentMax != i) {
if (color == "orange") {
para.style.backgroundColor = "orange";
} else if (color == "green") {
para.style.backgroundColor = "green";
} else {
para.style.backgroundColor = "blue";
}
}
para.style.height = numberArray[b] / 5 + "%";
document.getElementById("topContainer").appendChild(para);
}
}