Gnome Sort

Algoritmo similiar ao Insertion sort com a diferença que o Gnome sort leva um elemento para sua posição correta, com uma seqüencia grande de trocas assim como o Bubble sort

algoritmo percorre o vetor comparando seus elementos dois a dois, assim que ele encontra um elemento que está na posição incorreta, ou seja, um número maior antes de um menor, ele troca a posição dos elementos, e volta com este elemento até que encontre o seu respectivo lugar.

Como tudo funciona

Mãos a obra:


    import java.util.ArrayList;
    import java.util.Random;
    import java.util.Scanner;
    
    public class GnomeSort {
    
        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);
            }
    
            gnomeSort(lista, lista.size());
    
            for (Integer integer : lista) {
                System.out.print(integer + ", ");
                if (cont % 20 == 0) {
                    System.out.println();
                }
                cont++;
            }
        }
    
        /* ---------------------- Algoritimo De Ordenação ---------------------- */
        static void gnomeSort(ArrayList lista, int size) {
            int index = 0;
    
            while (index < size) {
                if (index == 0) {
                    index++;
                }
                if (lista.get(index) >= lista.get(index - 1)) {
                    index++;
                } else {
                    int temp = 0;
                    temp = lista.get(index);
                    lista.set(index, lista.get(index - 1));
                    lista.set(index - 1, temp);
                    index--;
                }
            }
        }
    }    

    
Tempo de execução(em segundos) VS Qtd de nº no Array:
Gnome Sort 1.000 10.000 500.000 1.000.000
Bom 0.0002855 0.0033286 0.0349889 0.0491664
Médio 0.0557882 1.7405212 3230.6410174 22408.106589
Ruim 0.0461259 2.2670075 3103.5219037 13875.323045

*A tabela representa a quantidade de numros utilizadas e o tempo de execução o processo de ordenação