Insertion Sort
O Insertion Sort tem como rotina base a inserção ordenada. A ideia é executar várias vezes essa rotina para ordenar um array.
Um array com N elementos no qual os N−1 primeiros elementos estão ordenados, mas o último elemento não está no seu lugar. Isto é, precisamos encaixar o último elemento de forma que a sequência fique ordenada.
O Insertion Sort aplica várias vezes a inserção ordenada para ordenar uma sequência.
Como tudo funciona
Mãos a obra:
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class InsertionSort {
public static void main(String[] args) {
Scanner leia = new Scanner(System.in);
ArrayList lista = new ArrayList<>();
int cont = 1;
for (int i = 0; i < 1000; i++) {
Random rand = new Random();
int n = rand.nextInt(1000);
lista.add(n);
}
insertionSort(lista);
for (Integer integer : lista) {
System.out.print(integer + ", ");
if (cont % 20 == 0) {
System.out.println();
}
cont++;
}
}
/* ---------------------- Algoritimo De Ordenação ---------------------- */
public static void insertionSort(ArrayList lista) {
int j, i;
Integer aux;
for (i = 1; i < lista.size(); i++) {
aux = lista.get(i);
for (j = i - 1; (j >= 0) && (lista.get(j) > aux); j--) {
lista.set(j + 1, lista.get(j));
}
lista.set(j + 1, aux);
}
}
}
Tempo de execução(em segundos) VS Qtd de nº no Array:
Selection Sort | 1.000 | 10.000 | 500.000 | 1.000.000 |
---|---|---|---|---|
Bom | 0.0004833 | 0.004389 | 0.0390283 | 0.1933607 |
Médio | 0.0349028 | 0.1515631 | 1409.825029 | 4072.0237792 |
Ruim | 0.0534072 | 0.2236758 | 538.7942957 | 2188.9588711 |
*A tabela representa a quantidade de numros utilizadas e o tempo de execução o processo de ordenação