Существует ли алгоритм «двоичной сортировки»? - PullRequest
19 голосов
/ 19 июня 2010

Есть ли алгоритм сортировки, который называется "двоичная сортировка"? Как сортировка слиянием, сортировка выбора или другие виды сортировки, существует ли двоичная сортировка?

Ответы [ 8 ]

12 голосов
/ 19 июня 2010

Это , это и есть двоичная сортировка вставок. Два очень похожи. Они оба квадратичные (O(n^2)) алгоритмы времени.

Оба алгоритма выполняют O(n log n) количество сравнений, но на практике вам также придется перемещать элементы, что сделает весь алгоритм квадратичным.

4 голосов
/ 17 марта 2014

JDK использует "двоичную сортировку" для массивов <размер 32 в своем методе <code>Arrays.sort(). Вот код от JDK7

private static void binarySort(Object[] a, int lo, int hi, int start) {
    assert lo <= start && start <= hi;
    if (start == lo)
        start++;
    for ( ; start < hi; start++) {
        @SuppressWarnings("unchecked")
        Comparable<Object> pivot = (Comparable) a[start];

        // Set left (and right) to the index where a[start] (pivot) belongs
        int left = lo;
        int right = start;
        assert left <= right;
        /*
         * Invariants:
         *   pivot >= all in [lo, left).
         *   pivot <  all in [right, start).
         */
        while (left < right) {
            int mid = (left + right) >>> 1;
            if (pivot.compareTo(a[mid]) < 0)
                right = mid;
            else
                left = mid + 1;
        }
        assert left == right;

        /*
         * The invariants still hold: pivot >= all in [lo, left) and
         * pivot < all in [left, start), so pivot belongs at left.  Note
         * that if there are elements equal to pivot, left points to the
         * first slot after them -- that's why this sort is stable.
         * Slide elements over to make room for pivot.
         */
        int n = start - left;  // The number of elements to move
        // Switch is just an optimization for arraycopy in default case
        switch (n) {
            case 2:  a[left + 2] = a[left + 1];
            case 1:  a[left + 1] = a[left];
                     break;
            default: System.arraycopy(a, left, a, left + 1, n);
        }
        a[left] = pivot;
    }
}
3 голосов
/ 21 мая 2013

Бинарная сортировка - это очень быстрый алгоритм, который включает битовое тестирование.Он имеет один проход для каждого бита в сортируемом элементе.Для каждого прохода, если бит установлен, сортируемый элемент укладывается в один конец буфера.Если бит не установлен, то элемент укладывается на другом конце буфера.Начиная сортировку с младшего значащего бита и обрабатывая следующие биты в порядке возрастания, вы получите отсортированный список.Я написал один из них в начале 8086 года в 1983 году для шотландского департамента образования.Стив Питтс

0 голосов
/ 26 ноября 2017

Сортировка кучи - это алгоритм сортировки путем концептуализации бинарного дерева и выполнения его увеличения и уменьшения.Это можно сделать на месте.

0 голосов
/ 05 января 2017

Может быть двоичная сортировка, но фактический отсортированный массив должен быть в противоположном смысле (т. Е. Скажем, вы хотите отсортировать массив целых чисел в порядке возрастания ... для этого у вас должен быть фактический массив в порядке убывания.)

0 голосов
/ 19 июня 2010

Не уверен, что вы ищете, но если вы ищете подходящий алгоритм двоичной сортировки, то вы хотите знать о ваших требованиях.Каждый алгоритм имеет свои сильные и слабые стороны.

Например, вы ищете алгоритм, который дает быструю среднюю производительность (например, поиск в куче) или производительность в наихудшем случае (самая медленная операция) (например, сбалансированное двоичное дерево).Некоторые из них медленные, если вам также нужно переходить от одного элемента к другому.Если вы выполняете много случайных операций, вы, вероятно, больше заинтересованы в средней производительности, но если вам необходимо убедиться, что любая операция выполняется быстрее, чем X миллисекунд, то вам может потребоваться другой алгоритм.Некоторые из них могут быть медленными, если вы всегда добавляете элементы в конец коллекции и т. Д.

Поэтому используйте Google для таких ключевых слов, как:

Все сводится к тому, что вам нужно.

0 голосов
/ 19 июня 2010

У нас нет алгоритма двоичной сортировки, но у нас есть двоичный поиск по отсортированному массиву.

0 голосов
/ 19 июня 2010

Существуют некоторые виды, которые включают разбиение на две части (сортировка слиянием), но я не верю, что существует сортировка, называемая именно "двоичная сортировка".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...