2013-09-29 3 views
1

Мне нужно было найти то, что делает этот тайный алгоритм. Теперь я знаю, что это что-то вроде, но я не могу найти официального имени.У этого вида есть имя?

Вот его Java-код:

for (int i = 0 ; i < myListSize; i++) { 
    min = Collections.min(myList.subList(i, myListSize)); 
    minIndex = myList.indexOf(min); 
    Collections.reverse(myList.subList(minIndex, myListSize)); 
    Collections.reverse(myList.subList(i, myListSize)); 
} 

Возьмите этот массив:

[G,E,D,A,F,C,H,I,B] 

It 1) ищет мин. элемент, 2) отменит подвариант оттуда и 3) снова перевернет все это:

1) [G,E,D,[A,F,C,H,I,B]] 
2) [G,E,D,[B,I,H,C,F,A]] 
3) [[A,F,C,H,I,B],D,E,G] 

Теперь мин. элемент находится слева. Повторите для остальной части массива:

1) [A] [F,C,H,I,[B,D,E,G]] 
2) [A] [F,C,H,I,[G,E,D,B]] 
3) [A] [[B,D,E,G],I,H,C,F] 

1) [A,B] [D,E,G,I,H,[C,F]] 
2) ... 

и voilà! Критерий сортировки. У вас есть имя для этого, пожалуйста?

+5

InefficientSort? –

+5

Не совсем понятно, почему он вообще делает разворот. Без этого, это просто сортировка ... –

+0

Похоже, это глупая версия сортировки сортировки, но перестановка подстроки может быть на самом деле быстрее, чем замена двух элементов в некоторой необычной реализации строки (например, DNA: affix reversal = one splice, substring exchange = четыре сращивания) –

ответ

8

Это называется Pancake sorting.

Pancake sorting, Image from wikipedia

Вот код гольф-головоломка о нем: Flipping pancakes

+1

OOH! Огромное спасибо. Теперь я голоден. :) – VoidStar

+3

Общая информация: Угадайте, кто участвует в этом алгоритме. Его Билл Гейтс. http://www.cs.berkeley.edu/~christos/papers/Bounds%20For%20Sorting%20By%20Prefix%20Reversal.pdf – thefourtheye

Смежные вопросы