Я знаю, что это может быть глупый вопрос, может быть, самый глупый вопрос сегодня, но я должен спросить его: я придумал этот алгоритм сортировки?
Вчера я немного вдохновил алгоритм сортировки на основе обмена. Сегодня я его реализовал, и он сработал.
Вероятно, он уже существует, поскольку существует много не очень популярных алгоритмов сортировки, в которых мало или вообще нет информации, и практически не существует их реализации.
Описание: В принципе, этот алгоритм берет элемент, их пару, затем элемент снова... до конца списка. Для каждого элемента/пары сравните КАЖДЫЕ два элемента на расстоянии одного и того же радиуса от парного пространства или элемента, пока не будет достигнута граница массива, и затем обменивайтесь этими элементами, если это необходимо. Повторите это для каждой пары/элемента списка.
Английский псевдо-код:
FOR i index to last index of Array (starting from 0)
  L index is i - 1
  R index is i + 1
  //Odd case, where i is the center
  WHILE (L is in array range and R is in array range)
    IF item Array[L] is greater than Array[R]
       EXCHANGE item Array[L] with Array[R]
    END-IF
    ADD 1 to R
    REST 1 to L
  END-WHILE
  //Even case, where i is not the center
  L index is now i
  R index in now i + 1
  WHILE (L is in array range and R is in array range)
    IF item Array[L] is greater than Array[R]
       EXCHANGE Array[L] with Array[R]
    END-IF
    ADD 1 to R
    REST 1 to L
  END-WHILE
END FOR
Это реализация в Java:
//package sorting;
public class OrbitSort {
    public static void main(String[] args) {
        int[] numbers ={ 15, 8, 6, 3, 11, 1, 2, 0, 14, 13, 7, 9, 4, 10, 5, 12 };
        System.out.println("Original list:");
        display(numbers);
        sort(numbers);
        System.out.println("\nSorted list:");
        display(numbers);
    }
    //Sorting algorithm
    public static void sort(int[] array) {
        for(int i = 0; i < array.length; i++){
            int L = i - 1;
            int R = i + 1;
            //Odd case (with a central item)
            while(L >= 0 && R < array.length){
                if(array[L] > array[R])
                    swap(array, L, R);
                L--;
                R++;
            }
            //Even case (with no central item)
            L = i;
            R = i + 1;
            while(L >= 0 && R < array.length) {
                if(array[L] > array[R])
                    swap(array, L, R);
                L--;
                R++;
            }
        }
    }
    //Swap two items in array.
    public static void swap(int[] array, int x, int y) {
        int temp = array[x];
        array[x] = array[y];
        array[y] = temp;
    }
    //Display items
    public static void display(int[] numbers){
        for(int i: numbers)
            System.out.print(" " + i);
        System.out.println();
    }
}
Я знаю, что может быть короче, но это просто ранняя реализация.
Вероятно, он работает в O (n ^ 2), но я не уверен.
Итак, что вы думаете? Он уже существует?