Passa al contenuto principale

Number Sorter

Anteprima Number Sorter Project

Il Progetto

Number Sorter interattivo sviluppato con JavaScript, focalizzato sull'implementazione e la comprensione degli algoritmi di ordinamento di base: Bubble Sort, Selection Sort, e Insertion Sort. Un progetto che svela la logica dietro l'ordinamento di una serie di numeri.

Codice Sorgente

<!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>

L'Apprendimento dietro la Banalità

In progetti come questo mi rendo conto di quanto diamo tutto per scontato. Quel che sembra un banalissimo programma che ordina 5 numeri, dal più piccolo al più grande viene visto da qualsiasi outsider con gli occhiali dell'Effetto Dunning-Kruger. Non è stato semplice ma ha rafforzato nettamente la mia comprensione dei cicli for, specialmente quelli annidati.

Cosa Ho Imparato

Algorithmic Thinking di Base:

  • Bubble Sort: Implementazione di un ciclo for annidato per confrontare e scambiare elementi adiacenti, facendo "galleggiare" il valore più grande verso la fine dell'array a ogni iterazione.
  • Selection Sort: Utilizzo di un ciclo for annidato per trovare l'indice del valore minimo nell'array non ordinato e scambiarlo con il primo elemento, restringendo progressivamente la porzione da ordinare.
  • Insertion Sort: Creazione di un array ordinato virtuale all'inizio, iterando attraverso l'array e inserendo ogni elemento nella sua posizione corretta all'interno della porzione già ordinata.

Cicli for Annidati:

  • Comprensione profonda di come i cicli interni ed esterni interagiscono per iterare e manipolare i dati in un array.
  • Utilizzo di variabili temporanee (temp) per lo scambio di valori durante l'ordinamento.

Manipolazione del DOM:

  • Selezione di una collezione di elementi con getElementsByClassName.
  • Utilizzo dello spread operator (...) per convertire una HTMLCollection in un array, rendendola iterabile con metodi come .map().
  • Estrazione di valori da elementi <select> con .map((dropdown) => Number(dropdown.value)).
  • Aggiornamento dinamico della UI con forEach per visualizzare l'array ordinato.

Funzioni e Eventi:

  • Funzione di callback per il metodo .sort() per definire un ordinamento numerico ascendente ((a, b) => a - b).
  • Gestione dell'evento click per avviare il processo di ordinamento.
  • Utilizzo di event.preventDefault() per prevenire il comportamento predefinito del form.

Prossimo Progetto: Imparare gli Advanced Array Methods costruendo una Calcolatrice Statistica