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