Menu
Coddy logo textTech

Ordinamento per inserimento

Lezione 14 di 26 del corso Gli array in C++ di Coddy.

Il selection sort è anch’esso un tipo di tecnica di ordinamento con complessità temporale O(n2), ma è un po’ più ottimizzato del bubble sort.

In questo algoritmo, l’array viene suddiviso in due parti. Una è ordinata e l’altra è non ordinata. Scegliamo un elemento da un array non ordinato e lo inseriamo nell’array ordinato nella sua posizione corretta.

Ripetiamo il processo finché tutti gli elementi non sono ordinati.

 

1. Supponiamo di avere un array {8,4,1,5}. Consideriamo il primo elemento ordinato e tutti gli altri non ordinati. All’inizio, il 0° elemento è considerato ordinato.

2. Crea una variabile temporanea e inserisci il (i)-esimo elemento (in questo caso è 4). Confronta temp con l’array attualmente ordinato, che al momento contiene 8. Poiché 4<8, sposta l’array ordinato a destra finché 4 non raggiunge la sua posizione corretta. In questo caso, 8 deve essere spostato una volta. Ora la lunghezza dell’array ordinato è diventata 2.

3. Ripetiamo il processo finché l’intero array non è ordinato.



for(int i=1;i<n;i++){           //inizia dal primo elemento, poiché consideriamo già ordinato l'elemento 0th
    int temp=arr[i];
    
    int j=i-1;                  //per controllare tutti gli elementi alla sua sinistra 
    
    while(arr[j]>temp && j>=0){ //sposta gli elementi finché sono maggiori di temp, fino al primo elemento
      arr[j+1]=arr[j];          //sposta l'elemento di una posizione a destra
      j--;                      
    }
    
    arr[j+1]=temp;              //metti temp nella posizione corretta
  
}

 

 

 

Per visualizzare l’insertion sort

Visualizzatore dell’insertion sort

 

challenge icon

Sfida

Dato un array, ordinalo usando l'ordinamento per inserzione e verifica se l'array aggiornato è una progressione aritmetica oppure no. Restituisci true se è una PA, altrimenti restituisci false.

 

Una PA (progressione aritmetica) è una sequenza che ha una differenza costante tra elementi consecutivi.

esempio: 10,20,30,40,...

 

Provalo tu

#include<iostream>
#include<vector>
using namespace std;

bool AP(vector<int>arr, int n){
   
     //Code here

}

Tutte le lezioni di Gli array in C++

Esercitati da solo: Compilatore C++ online