diff --git a/README.md b/README.md new file mode 100644 index 0000000..f68943b --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# Sorting_Visualizer + +A web application showcasing the inner workings of sorting algorithms. + +Implemented algorithms: +1) Bubble sort +2) Selection sort +3) Insertion sort +4) Merge sort +5) Quick sort +6) Heap sort + +Features: +1) Colored representation of step being executed. + 1.1) Blue:default + 1.2) Yellow: Being compared + 1.3) Red: Identified as in incorrect position and to be moved + 1.4) Green: In correct position +2) 3 Controls for visualizations + 2.1) Speed of visualization (5 speed levels) + 2.2) Data size () + 2.3) Generation of new data (Randomly generate new data). +4) Time and Space complexity of algorithm being visualized. + +Take a look at live version: diff --git a/VS_Sorting_Visualizer.code-workspace b/VS_Sorting_Visualizer.code-workspace new file mode 100644 index 0000000..876a149 --- /dev/null +++ b/VS_Sorting_Visualizer.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..dd1d118 --- /dev/null +++ b/css/style.css @@ -0,0 +1,230 @@ + +* { + margin: 0px; + padding: 0px; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: large; + font-weight: bold; + text-transform: uppercase; +} + +nav { + background-color: #3b3a3a; + color: white; + display: -ms-grid; + display: grid; + -ms-grid-columns: 30% 60%; + grid-template-columns: 30% 60%; + -webkit-column-gap: 10%; + column-gap: 10%; + padding: 0% 5%; +} + +nav .array-inputs { + display: -ms-grid; + display: grid; + -ms-grid-columns: 60% 40%; + grid-template-columns: 60% 40%; + place-content: center; + padding: 5% 0%; +} + +nav .array-inputs #a_size { + padding: 5% 0%; +} + +nav .array-inputs #a_speed { + padding: 5% 0%; +} + +nav .array-inputs #a_generate { + background-color: transparent; + border: none; + outline: none; + color: white; + padding: 4% 0% 0% 0%; + padding-left: 20%; +} + +nav .array-inputs #a_generate:hover { + cursor: pointer; +} + +nav .header_right { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} + +nav .header_right .nav-heading { + display: inline-block; + font-size: xxx-large; + padding: 3% 0%; +} + +nav .header_right .algos{ + display: grid; + grid-template-columns: repeat(6, 1fr); + justify-content: center; + padding: 2% 0%; + +} + +nav .header_right .algos button { + background-color: transparent; + border: none; + color: white; + outline: none; + padding: 5% 0%; + font-size: x-large; +} + +nav .header_right .algos button:hover { + background-color: blue; + cursor: pointer; +} + +nav .header_right .algos .butt_locked { + background-color: transparent; + cursor: pointer; +} + +nav .header_right .algos .butt_locked:hover { + background-color: transparent; + cursor: pointer; +} + +nav .header_right .algos .butt_selected { + background-color: white; + color: green; +} + +nav .header_right .algos .butt_selected:hover { + background-color: white; + cursor: pointer; +} + +nav .header_right .algos .butt_unselected:hover { + background-color: blue; + cursor: pointer; +} + +section { + display: -ms-grid; + display: grid; + -ms-grid-columns: 20% 60% 20%; + grid-template-columns: 20% 60% 20%; +} + +section .Complexity_Containers { + margin-top: 20%; +} + +section .Complexity_Containers .Pair_Definitions { + margin-top: 20%; +} + +section .Complexity_Containers .Pair_Definitions p { + display: inline; +} + +section .Complexity_Containers .Pair_Definitions p.Sub_Heading { + font-size: medium; + text-transform: none; +} + +section #Info_Cont1 { + padding: 20% 10%; +} + +section #Info_Cont1 h3 { + text-decoration: underline; +} + +section #array_container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 100%; + height: 70vh; +} + +section #Info_Cont2 { + padding: 20% 10%; +} + +section #Info_Cont2 h3 { + text-decoration: underline; +} + +.hide { + display: none; +} + + +@media (max-width: 480px) +{ + nav { + grid-template-columns: 100%; + text-align: center; + } + + nav .header_right .nav-heading { + font-size: xx-large; + } + + nav .header_right .algos { + grid-template-columns: 100%; + } + + section { + grid-template-columns: 100%; + padding: 10%; + } + + #array_container { + height: 50vh; + } +} + +@media (min-width: 481px) and (max-width: 1250px) +{ + nav { + grid-template-columns: 40% 60%; + font-size: medium; + } + + nav .header_right .nav-heading { + font-size: x-large; + } + + section { + grid-template-columns: 10% 80% 10%; + } + + #array_container { + height: 60vh; + } +} + +@media (min-width: 1251px) +{ + nav { + grid-template-columns: 30% 60%; + font-size: large; + } + + section { + grid-template-columns: 20% 60% 20%; + } + + #array_container { + height: 70vh; + } +} + + diff --git a/css/style.css.map b/css/style.css.map new file mode 100644 index 0000000..cbe0ab4 --- /dev/null +++ b/css/style.css.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "mappings": "AAAA;;;;EAIE;AAIF,AAAA,CAAC,CACD;EACI,MAAM,EAAE,GAAG;EACX,OAAO,EAAE,GAAG;EACZ,WAAW,EAAE,8CAA8C;EAC3D,SAAS,EAAE,KAAK;EAChB,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,SAAS;CAC5B;;AAED,AAAA,GAAG,CACH;EACI,gBAAgB,EAAE,OAAe;EACjC,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,IAAI;EACb,qBAAqB,EAAE,OAAO;EAC9B,UAAU,EAAE,GAAG;EACf,OAAO,EAAE,KAAK;CA6FjB;;AApGD,AAQI,GARD,CAQC,aAAa,CACb;EACI,OAAO,EAAE,IAAI;EACb,qBAAqB,EAAE,OAAO;EAC9B,aAAa,EAAE,MAAM;EACrB,OAAO,EAAE,KAAK;CAuBjB;;AApCL,AAeQ,GAfL,CAQC,aAAa,CAOT,OAAO,CACP;EACI,OAAO,EAAE,KAAK;CACjB;;AAlBT,AAmBQ,GAnBL,CAQC,aAAa,CAWT,QAAQ,CACR;EACI,OAAO,EAAE,KAAK;CACjB;;AAtBT,AAuBQ,GAvBL,CAQC,aAAa,CAeT,WAAW,CACX;EACI,gBAAgB,EAAE,WAAW;EAC7B,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI;EACb,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,WAAW;EACpB,YAAY,EAAE,GAAG;CAKpB;;AAnCT,AA+BY,GA/BT,CAQC,aAAa,CAeT,WAAW,AAQN,MAAM,CACP;EACI,MAAM,EAAE,OAAO;CAClB;;AAlCb,AAqCI,GArCD,CAqCC,aAAa,CACb;EACI,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;CA2DzB;;AAnGL,AA0CQ,GA1CL,CAqCC,aAAa,CAKT,YAAY,CACZ;EACI,OAAO,EAAE,YAAY;EAErB,SAAS,EAAE,SAAS;EACpB,OAAO,EAAE,KAAK;CACjB;;AAhDT,AAiDQ,GAjDL,CAqCC,aAAa,CAYT,MAAM,CACN;EACI,OAAO,EAAE,IAAI;EACb,qBAAqB,EAAE,oBAAkC;EACzD,aAAa,EAAE,MAAM;EACrB,OAAO,EAAE,KAAK;CA4CjB;;AAlGT,AAuDY,GAvDT,CAqCC,aAAa,CAYT,MAAM,CAMF,MAAM,CACN;EACI,gBAAgB,EAAE,WAAW;EAC7B,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,KAAK;EACd,SAAS,EAAE,OAAO;CAMrB;;AApEb,AA+DgB,GA/Db,CAqCC,aAAa,CAYT,MAAM,CAMF,MAAM,AAQD,MAAM,CACP;EACI,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,OAAO;CAClB;;AAnEjB,AAsEY,GAtET,CAqCC,aAAa,CAYT,MAAM,CAqBF,YAAY,CACZ;EACI,gBAAgB,EAAE,WAAW;EAC7B,MAAM,EAAE,OAAO;CAMlB;;AA/Eb,AA0EgB,GA1Eb,CAqCC,aAAa,CAYT,MAAM,CAqBF,YAAY,AAIP,MAAM,CACP;EACI,gBAAgB,EAAE,WAAW;EAC7B,MAAM,EAAE,OAAO;CAClB;;AA9EjB,AAgFY,GAhFT,CAqCC,aAAa,CAYT,MAAM,CA+BF,cAAc,CACd;EACI,gBAAgB,EAAE,KAAK;EACvB,KAAK,EAAC,KAAK;CAMd;;AAzFb,AAoFgB,GApFb,CAqCC,aAAa,CAYT,MAAM,CA+BF,cAAc,AAIT,MAAM,CACP;EACI,gBAAgB,EAAE,KAAK;EACvB,MAAM,EAAE,OAAO;CAClB;;AAxFjB,AA4FgB,GA5Fb,CAqCC,aAAa,CAYT,MAAM,CAyCF,gBAAgB,AAEX,MAAM,CACP;EACI,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,OAAO;CAClB;;AAMjB,AAAA,OAAO,CACP;EACI,OAAO,EAAE,IAAI;EACb,qBAAqB,EAAE,WAAW;CA+CrC;;AAlDD,AAKI,OALG,CAKH,sBAAsB,CAAC;EAEnB,UAAU,EAAE,GAAG;CAiBlB;;AAxBL,AASQ,OATD,CAKH,sBAAsB,CAIlB,iBAAiB,CAAC;EAEd,UAAU,EAAE,GAAG;CAWlB;;AAtBT,AAaY,OAbL,CAKH,sBAAsB,CAIlB,iBAAiB,CAIb,CAAC,CAAC;EACE,OAAO,EAAE,MAAM;CAClB;;AAfb,AAiBY,OAjBL,CAKH,sBAAsB,CAIlB,iBAAiB,CAQb,CAAC,AAAA,YAAY,CAAC;EACV,SAAS,EAAC,MAAM;EAChB,cAAc,EAAE,IAAI;CACvB;;AApBb,AA0BI,OA1BG,CA0BH,WAAW,CACX;EACI,OAAO,EAAE,OAAO;CAMnB;;AAlCL,AA8BQ,OA9BD,CA0BH,WAAW,CAIP,EAAE,CAAC;EACC,eAAe,EAAE,SAAS;CAC7B;;AAhCT,AAmCI,OAnCG,CAmCH,gBAAgB,CAChB;EACI,OAAO,EAAE,IAAI;EACb,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;CACf;;AAxCL,AAyCI,OAzCG,CAyCH,WAAW,CACX;EACI,OAAO,EAAE,OAAO;CAMnB;;AAjDL,AA6CQ,OA7CD,CAyCH,WAAW,CAIP,EAAE,CAAC;EACC,eAAe,EAAE,SAAS;CAC7B;;AAKT,AAAA,KAAK,CACL;EACI,OAAO,EAAE,IAAI;CAChB;;AAED;;;;;;;;;;;;;;;EAeE;AAEF;;;;EAIE", + "sources": [ + "../Sorting_Visualizer/style.scss" + ], + "names": [], + "file": "style.css" +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..dc41052 --- /dev/null +++ b/index.html @@ -0,0 +1,106 @@ + + + + + + + + Sorting Visualizer + + + + + + +
+ +
+ +
+ +
+ +

TIME COMPLEXITY

+ +
+ +
+

Worst case:

+

+
+ +
+

Average case:

+

+
+ +
+

Best case:

+

+
+ +
+ +
+ +
+ +
+ +
+ +

SPACE COMPLEXITY

+ +
+ +
+

Worst case:

+

+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/scripts/bubble_sort.js b/scripts/bubble_sort.js new file mode 100644 index 0000000..827fe50 --- /dev/null +++ b/scripts/bubble_sort.js @@ -0,0 +1,40 @@ + +function Bubble() +{ + //Setting Time complexities + document.getElementById("Time_Worst").innerText="O(N^2)"; + document.getElementById("Time_Average").innerText="Θ(N^2)"; + document.getElementById("Time_Best").innerText="Ω(N)"; + + //Setting Space complexity + document.getElementById("Space_Worst").innerText="O(1)"; + + c_delay=0; + + for(var i=0;idiv_sizes[j+1]) + { + div_update(divs[j],div_sizes[j], "red");//Color update + div_update(divs[j+1],div_sizes[j+1], "red");//Color update + + var temp=div_sizes[j]; + div_sizes[j]=div_sizes[j+1]; + div_sizes[j+1]=temp; + + div_update(divs[j],div_sizes[j], "red");//Height update + div_update(divs[j+1],div_sizes[j+1], "red");//Height update + } + div_update(divs[j],div_sizes[j], "blue");//Color updat + } + div_update(divs[j],div_sizes[j], "green");//Color update + } + div_update(divs[0],div_sizes[0], "green");//Color update + + enable_buttons(); +} + diff --git a/scripts/heap_sort.js b/scripts/heap_sort.js new file mode 100644 index 0000000..74f67a1 --- /dev/null +++ b/scripts/heap_sort.js @@ -0,0 +1,93 @@ + +function Heap() +{ + //Setting Time complexities + document.getElementById("Time_Worst").innerText="O(N log N)"; + document.getElementById("Time_Average").innerText="Θ(N log N)"; + document.getElementById("Time_Best").innerText="Ω(N log N)"; + + //Setting Space complexity + document.getElementById("Space_Worst").innerText="O(1)"; + + c_delay=0; + + heap_sort(); + + enable_buttons(); +} + +function swap(i,j) +{ + div_update(divs[i],div_sizes[i],"red");//Color update + div_update(divs[j],div_sizes[j],"red");//Color update + + var temp=div_sizes[i]; + div_sizes[i]=div_sizes[j]; + div_sizes[j]=temp; + + div_update(divs[i],div_sizes[i],"red");//Height update + div_update(divs[j],div_sizes[j],"red");//Height update + + div_update(divs[i],div_sizes[i],"blue");//Color update + div_update(divs[j],div_sizes[j],"blue");//Color update +} + +function max_heapify(n,i) +{ + var largest=i; + var l=2*i+1; + var r=2*i+2; + + if(ldiv_sizes[largest]) + { + if(largest!=i) + { + div_update(divs[largest],div_sizes[largest],"blue");//Color update + } + + largest=l; + + div_update(divs[largest],div_sizes[largest],"red");//Color update + } + + if(rdiv_sizes[largest]) + { + if(largest!=i) + { + div_update(divs[largest],div_sizes[largest],"blue");//Color update + } + + largest=r; + + div_update(divs[largest],div_sizes[largest],"red");//Color update + } + + if(largest!=i) + { + swap(i,largest); + + max_heapify(n,largest); + } +} + +function heap_sort() +{ + for(var i=Math.floor(array_size/2)-1;i>=0;i--) + { + max_heapify(array_size,i); + } + + for(var i=array_size-1;i>0;i--) + { + swap(0,i); + div_update(divs[i],div_sizes[i],"green");//Color update + div_update(divs[i],div_sizes[i],"yellow");//Color update + + max_heapify(i,0); + + div_update(divs[i],div_sizes[i],"blue");//Color update + div_update(divs[i],div_sizes[i],"green");//Color update + } + div_update(divs[i],div_sizes[i],"green");//Color update +} + diff --git a/scripts/insertion_sort.js b/scripts/insertion_sort.js new file mode 100644 index 0000000..5d3ea86 --- /dev/null +++ b/scripts/insertion_sort.js @@ -0,0 +1,53 @@ + + +function Insertion() +{ + //Setting Time complexities + document.getElementById("Time_Worst").innerText="O(N^2)"; + document.getElementById("Time_Average").innerText="Θ(N^2)"; + document.getElementById("Time_Best").innerText="Ω(N)"; + + //Setting Space complexity + document.getElementById("Space_Worst").innerText="O(1)"; + + c_delay=0; + + for(var j=0;j=0 && div_sizes[i]>key) + { + div_update(divs[i],div_sizes[i],"red");//Color update + div_update(divs[i+1],div_sizes[i+1],"red");//Color update + + div_sizes[i+1]=div_sizes[i]; + + div_update(divs[i],div_sizes[i],"red");//Height update + div_update(divs[i+1],div_sizes[i+1],"red");//Height update + + div_update(divs[i],div_sizes[i],"blue");//Color update + if(i==(j-1)) + { + div_update(divs[i+1],div_sizes[i+1],"yellow");//Color update + } + else + { + div_update(divs[i+1],div_sizes[i+1],"blue");//Color update + } + i-=1; + } + div_sizes[i+1]=key; + + for(var t=0;tmid) + { + Arr[k++]=div_sizes[q++]; + div_update(divs[q-1],div_sizes[q-1],"red");//Color update + } + else if(q>end) + { + Arr[k++]=div_sizes[p++]; + div_update(divs[p-1],div_sizes[p-1],"red");//Color update + } + else if(div_sizes[p]