Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрая сортировка 
V
    Опции темы
Gregorian
Дата 21.12.2006, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 18.12.2006

Репутация: нет
Всего: 2



Изучаю методы сортировки! Мне понятны уже многие методы. Трудно конечно, т.к. все примеры написаны на не очень понятном для меня С++.  Ввот взял код быстрой сортировки из википедии и что-то не врублюсь...
Код

import java.util.Comparator;
import java.util.Random;

public class Quicksort {
    public static final Random RND = new Random();

    private void swap(Object[] array, int i, int j) {
        Object tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }

    private int partition(Object[] array, int begin, int end, Comparator cmp) {
        int index = begin + RND.nextInt(end — begin + 1);
        Object pivot = array[index];
        swap(array, index, end);        
        for (int i = index = begin; i < end; ++ i) {
            if (cmp.compare(array[i], pivot) <= 0) {
                swap(array, index++, i);
            }
        }
        swap(array, index, end);        
        return (index);
    }

    private void qsort(Object[] array, int begin, int end, Comparator cmp) {
        if (end > begin) {
            int index = partition(array, begin, end, cmp);
            qsort(array, begin, index - 1, cmp);
            qsort(array, index + 1,  end,  cmp);
        }
    }

    public void sort(Object[] array, Comparator cmp) {
        qsort(array, 0, array.length - 1, cmp);
    }
}

Объясните пожалуйста, как это работает?
--------------------
Вступил на путь доморощенного жабиста дилетанта! 
PM MAIL   Вверх
MOFA
  Дата 21.12.2006, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 17.12.2006

Репутация: нет
Всего: нет



Общий принцип такой, мы случайным образом определяем число m из массива, а потом делаем следующее:
   1. Устанавливаем левую границу за нулевой элемент, а правую за последний
   2. За линейное время прохоим маркером по массиву и с каждым числом х проделываем операции:
            если (x<m) то оставляем его на месте и левую границу двигаем на позицию вправо, маркер тоже двигаем вправо
            если (x>m) то двигаем правую границу на позицию влево и меняем наш елемент с тем, что стоит за правой границей, маркер остается на месте
            если (x==m) то просто передвигаем маркер дальше
  И так до тех пор, пока маркер не дойдет до правой границы, после чего мы получим числа <=m слева от маркера и числа >m справа от него. Потом для этих двух подмассивов рекурсивно запускаем тот же метод.
Вот в принципе и вся идея, если сложно будет разобраться, попробуй нарисовать на бумаге  smile 
PM MAIL   Вверх
V.A.KeRneL
  Дата 21.12.2006, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: нет
Всего: 14



Gregorian, насколько я понял, ты взял код отсюда: http://ru.wikipedia.org/wiki/Быстрая_сортировка
Тогда смотри подробное описание здесь: http://en.wikipedia.org/wiki/Quicksort
Единственное, что понадобится, это начальные знания английского, ну или хороший переводчик!))

Цитата(Gregorian @  21.12.2006, 00:42 Найти цитируемый пост)

А как же Гугль?


З.Ы. Если у тебя до сих пор (изучаешь уже quicksort) нету книжки про алгоритмы, то купи её срочно!!


Это сообщение отредактировал(а) V_A_KeRneL - 21.12.2006, 03:50


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
Gregorian
Дата 21.12.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 18.12.2006

Репутация: нет
Всего: 2



Цитата(V_A_KeRneL @  21.12.2006,  03:48 Найти цитируемый пост)
Если у тебя до сих пор (изучаешь уже quicksort) нету книжки про алгоритмы, то купи её срочно!!

Спасибо за совет. Про это я пожалуй создам отдельную тема.

Добавлено @ 17:23 
Цитата(MOFA @  21.12.2006,  01:02 Найти цитируемый пост)
если сложно будет разобраться, попробуй нарисовать на бумаге

Так и сделаю.
--------------------
Вступил на путь доморощенного жабиста дилетанта! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.