Я думаю, что нашел хороший алгоритм сортировки. Кажется быстрее чем быстрая сортировка? - PullRequest
0 голосов
/ 08 января 2020

Это работает без сравнения.

Сначала он находит наибольшее число в массиве и сохраняет его в переменной с именем "max". Затем он создает временный массив длиной max + 1. После этого каждый «tempArray [i]» считает, как часто во входном массиве подсчитывается число, равное «i». В конце концов, он преобразует «tempArray» и записывает его во входной массив. Посмотреть на себя.

 static int[] nSort(int[] array) {
        int max = array[0];
        for(int i = 1; i < array.length; i++) {
            max = Math.max(max, array[i]);
        }
        Integer[] tempArray = new Integer[max+1];
        for(int i = 0; i < array.length; i++) {
            if(tempArray[array[i]] == null) {
                tempArray[array[i]] = 0;
            }
            tempArray[array[i]]++;
        }
        for(int[] i = new int[2]; i[0] < max + 1; i[0]++) {
            if(tempArray[i[0]] != null) {
                while(tempArray[i[0]] > 0) {
                    array[i[1]] = i[0];
                    i[1]++;
                    tempArray[i[0]]--;
                }
            }
        }
        return array;
    }

Я измерил измеренное время выполнения на графике ниже. Зеленый - мой алгоритм, красный - быстрая сортировка.

Я использовал эту реализацию быстрой сортировки GitHub и измерял время выполнения так же, как реализовано там.

График времени выполнения: The Runtime Graph

...