Skip to main content

Number Sorter

Number Sorter Project Preview

The Project

Interactive Number Sorter developed with JavaScript, focusing on the implementation and understanding of basic sorting algorithms: Bubble Sort, Selection Sort, and Insertion Sort. A project that unveils the logic behind sorting algorithms.

Source Code

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="./styles.css" />
<title>Number Sorter</title>
</head>
<body>
<main>
<h1>Number Sorter</h1>
<form id="form" class="form">
<h2>Input:</h2>
<fieldset>
<span class="bracket">[</span>
<div>
<select
name="values"
class="values-dropdown"
aria-label="first number"
>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8" selected>8</option>
<option value="9">9</option>
</select>
<span class="comma">,</span>
</div>
<div>
<select
name="values"
class="values-dropdown"
aria-label="second number"
>
<option value="0">0</option>
<option value="1">1</option>
<option value="2" selected>2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>
<span class="comma">,</span>
</div>
<div>
<select
name="values"
class="values-dropdown"
aria-label="third number"
>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4" selected>4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>
<span class="comma">,</span>
</div>
<div>
<select
name="values"
class="values-dropdown"
aria-label="fourth number"
>
<option value="0">0</option>
<option value="1" selected>1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>
<span class="comma">,</span>
</div>
<div>
<select
name="values"
class="values-dropdown"
aria-label="fifth number"
>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3" selected>3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>
</div>
<span class="bracket">]</span>
</fieldset>
<button id="sort">Sort</button>
</form>
<div class="output-container">
<h2>Output:</h2>
<div class="output-array">
<span class="bracket">[</span>
<div>
<span class="output-value" id="output-value-0">0</span>
<span class="comma">,</span>
</div>
<div>
<span class="output-value" id="output-value-1">0</span>
<span class="comma">,</span>
</div>
<div>
<span class="output-value" id="output-value-2">0</span>
<span class="comma">,</span>
</div>
<div>
<span class="output-value" id="output-value-3">0</span>
<span class="comma">,</span>
</div>
<div>
<span class="output-value" id="output-value-4">0</span>
</div>
<span class="bracket">]</span>
</div>
</div>
</main>
<script src="./script.js"></script>
</body>
</html>

The Learning Behind the Triviality

In projects like this, I realize how much we take everything for granted. What seems like a very simple program that sorts 5 numbers, from smallest to largest, is seen by any outsider through the glasses of the Dunning-Kruger Effect. It wasn't easy, but it clearly strengthened my understanding of for loops, especially nested ones.

What I Learned

Basic Algorithmic Thinking:

  • Bubble Sort: Implementation of a nested for loop to compare and swap adjacent elements, causing the largest value to "bubble up" to the end of the array with each iteration.
  • Selection Sort: Use of a nested for loop to find the index of the minimum value in the unsorted portion of the array and swap it with the first element, progressively building the sorted portion from left to right.
  • Insertion Sort: Creation of a virtual sorted array at the beginning, iterating through the array and inserting each element into its correct position within the already sorted portion.

Nested for Loops:

  • Deep understanding of how inner and outer loops interact to iterate and manipulate data in an array.
  • Use of temporary variables (temp) for swapping values during sorting.

DOM Manipulation:

  • Selection of a collection of elements with getElementsByClassName.
  • Use of the spread operator (...) to convert an HTMLCollection into an array, making it iterable with methods like .map().
  • Extraction of values from <select> elements with .map((dropdown) => Number(dropdown.value)).
  • Dynamic UI update with forEach to display the sorted array.

Functions and Events:

  • Callback function for the .sort() method to define an ascending numerical sort ((a, b) => a - b).
  • Handling of the click event to start the sorting process.
  • Use of event.preventDefault() to prevent the default form behavior.

Next Project: Learn Advanced Array Methods by Building a Statistics Calculator