Ordinamento e ricerca

Genera un array di interi casuali, lo ordina e applica ripetutamente la ricerca binaria

  • l’algoritmo di ordinamento è un bubblesort ottimizzato
  • Math.random(), genera un numero casuale in [0.0, 1.0[
<script>

function ordina(array)                 // bubble sort migliorato
{
   var ultimaCoppia, ultimoScambio, x
   
   ultimaCoppia=array.length-2;
   do
   {
      ultimoScambio=0;
      for(var i=0; i <= ultimaCoppia; i++)
      {
         if(parseInt(array[i]) > parseInt(array[i+1]))
         {
            x=array[i]
            array[i]=array[i+1]
            array[i+1]=x
            ultimoScambio=i;
         }
      }
      ultimaCoppia=ultimoScambio-1;
   }
   while(ultimoScambio > 0);
}

function ricerca_binaria(array, x)     // ricerca binaria
{
   var inf=0, sup=array.length-1
   
   while(inf <= sup)
   {
      var medio=Math.floor((inf+sup)/2)
      if(x < array[medio])
         sup=medio-1
      else if(x == array[medio])
         return medio
      else
         inf=medio+1
   }
   return -1
}

var maxVal=1000
var quanti=100

document.writeln("<h3>Array di " + quanti + " numeri da 0 a " + (maxVal-1) + "</h3>")
var a=new Array(100);
for(var i=0; i < quanti; i++)
{
   a[i]=Math.floor(maxVal*Math.random())
   document.write(a[i] + " ")
}

document.writeln("<h3>Ordinato</h3>")
ordina(a)
for(var i=0; i < quanti; i++)
   document.write(a[i] + " ")

document.writeln("<br/><br/>Scegli il valore e avrai la posizione, <b>-1</b> per uscire<br/>")
var ancora
var valore
do
{
   valore=parseInt(prompt("VALORE? (-1 per uscire)"))
   if(valore < 0)
      ancora=false
   else
   {
      ancora=true
      posizione=ricerca_binaria(a, valore)
      if(posizione == -1)
         document.writeln("<br/>" + valore + " <b>non</b> è presente")
      else
         document.writeln("<br/>" + valore + " : <b>" + posizione + "</b>")
   }
}
while(ancora)

</script>

Lascia un commento