Selection Sort(A[1,2..n]:array of integers)
1.for i=1 to n-1
2.for j=i+1 to n
3.if A[j]<A[i]
4 swap(A[i],A[j])
Sto cercando di dimostrare la correttezza di questo algoritmo, ho letto dal mio libro e qui è ciò che è scritto: dobbiamo avere 2 invarianti per il ciclo interno ed esterno
Gli stati interni: ogni volta che raggiungiamo la linea 2, la corrente A [i] mantiene il valore di un elemento minimo da A [i, ..., j-1]
Gli stati esterni: ogni volta che siamo alla linea 1, il sottoarray attuale A [1, .., i-1] è costituito da i-1 in numero di elementi più piccoli dall'array originale A '[1, ...., n] nell'ordine ordinato
Ora per dimostrare che si tratta veramente di un ordinamento usiamo il ciclo esterno con l'affermazione che la parte da A [1, .., i-1] è ordinata e dal ciclo interno invariante A [i] è il minimo da A [1, ... n] ed è risolto, tuttavia ciò che mi sembra poco chiaro è come progettiamo l'invariante interno, perché diciamo che A [i] è il minimo da A [i, .., j-1 ] Ho provato con alcuni valori e gira sempre solo 1 elemento e credo che nella nostra prova finale diciamo che non è [I] il minimo in A [i, ... j-1] ma A [i, .. n ]. Non dovremmo dire che A [i] è il minimo in A [i, .., j-1] poiché lo abbiamo dimostrato?