Я знаю, что это может быть глупый вопрос, может быть, самый глупый вопрос сегодня, но я должен спросить его: я придумал этот алгоритм сортировки?
Вчера я немного вдохновил алгоритм сортировки на основе обмена. Сегодня я его реализовал, и он сработал.
Вероятно, он уже существует, поскольку существует много не очень популярных алгоритмов сортировки, в которых мало или вообще нет информации, и практически не существует их реализации.
Описание: В принципе, этот алгоритм берет элемент, их пару, затем элемент снова... до конца списка. Для каждого элемента/пары сравните КАЖДЫЕ два элемента на расстоянии одного и того же радиуса от парного пространства или элемента, пока не будет достигнута граница массива, и затем обменивайтесь этими элементами, если это необходимо. Повторите это для каждой пары/элемента списка.
Английский псевдо-код:
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), но я не уверен.
Итак, что вы думаете? Он уже существует?