Sto imparando gli algoritmi e provo a scambiare i numeri interi in un array usando Swift, so che è efficace usare la funzione 'swap' ma cerco di imparare approcci diversi. così cerco metodi diversi e non capisco una cosa - ho una serie di 200 int e quando uso questo metodo:Algoritmo di scambio di interi
func selectionSort(var array: [Int]) {
print("Selection Sort")
for i in 0..<array.count {
for j in i+1..<array.count {
if array[j] < array[i] {
let temp = array[j] //runs 7282 times
array[j] = array[i] // runs 7282 times
array[i] = temp // runs 7282 times
}
}
}
print(array)
}
corre per 7 secondi e il codice di swap viene eseguito 7282 (o giù di lì) volte, ma quando uso questo:
func selectionSort(var array: [Int]) {
print("Selection Sort")
for i in 0..<array.count {
for j in i+1..<array.count {
if array[j] < array[i] {
array.insert(array[j], atIndex: i)
array.removeAtIndex(j+1)
}
}
}
print(array)
}
funziona solo 198 volte in 1,3 secondi?
Non capisco perché il numero di esecuzioni è così diverso? Appare solo in selezione. Non vi sono differenze di questo tipo nel numero di esecuzioni se utilizzo, ad esempio, il bubble sort.
Si ottengono array ordinati in entrambi gli esempi? Sembra che il secondo metodo rimuova uno dei valori e duplichi l'altro valore, il che significa che l'implementazione potrebbe essere errata. Ci si aspetterebbe meno esecuzioni del codice menzionato perché il predicato attorno ad esso non si terrà più spesso se si duplica ogni valore nell'array. – Glubus