-
Notifications
You must be signed in to change notification settings - Fork 0
/
bubbleSort.js
89 lines (83 loc) · 2.06 KB
/
bubbleSort.js
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const n=Number(prompt("enter the size of array you want"))
// const n=30;
let speed=100;
const array=[];
init();
function init(){
for (let i=0;i<n;i++){
array[i]=Math.random();
}
showBars();
}
// console.log(array);
function play(){
const copy=[...array];
const moves=bubbleSort(copy);
animate(moves);
}
function animate(moves){
if(moves.length==0){
showBars();
return
}
else{
const move=moves.shift();
const [i,j]=move.indices;
if(move.type=="swap"){
[array[i],array[j]]=[array[j],array[i]];
}
showBars(move);
setTimeout(function(){
animate(moves);
},speed);
}
}
function bubbleSort(array){
const moves=[];
do{
var swapped=false;
for(let i=1;i<array.length;i++){
if(array[i-1]>array[i]){
moves.push(
{indices:[i-1,i],type:"comp"}
);
swapped=true;
moves.push(
{indices:[i-1,i],type:"swap"}
);
[array[i-1],array[i]]=[array[i],array[i-1]]
}
}
}while(swapped);
return moves;
}
function showBars(move){
container.innerHTML="";
for(let i=0;i<array.length;i++){
const bar=document.createElement("div");
bar.style.height=array[i]*100+"%";
bar.classList.add("bar");//take style from css class bar
if(move && move.indices.includes(i)){
if (move.type=="swap") {
bar.style.backgroundColor="red";
}
else{
bar.style.backgroundColor="blue";
}
}
// else{
// bar.style.backgroundColor="green";
// }
container.appendChild(bar);
}}
// function sorting() {
// do{
// var swapped=false;
// for(let i=1;i<array.length;i++){
// if(array[i-1]>array[i]){
// swapped=true;
// [array[i-1],array[i]]=[array[i],array[i-1]]
// }
// }
// }while(swapped);
// }