Быстрое осуществление рода, имеющие средний из трех разделов и отсечки \u0026quot;для малого

Быстрая сортировка является хорошо известный алгоритм сортировки, разработанный CAR Хора, что в среднем, составляет

Быстрая сортировка сортов, применяя разделяй и властвуй стратегия разделить список на два суб-листы.

Шаги:

  1. Pick an element, called a pivot, from the list.
  2. Reorder the list so that all elements which are less than the pivot come before the pivot and so that all elements greater than the pivot come after it (equal values can go either way). After this partitioning, the pivot is in its final position. This is called the partition operation.
  3. Recursively sort the sub-list of lesser elements and the sub-list of greater elements.

База случае рекурсии списки размер нулю или единице, которые всегда сортируются. Алгоритм всегда заканчивается, поскольку она ставит по меньшей мере одного из элементов в ее окончательном месте на каждой итерации.

Быстрая сортировка с Медиана-оф-три функции перегородки почти такой же, как нормальный быстрой сортировки с той лишь разницей, каким опорного пункта выбран. В нормальной быстрой сортировки первого элемента будет автоматически пункта стержень. Это приводит к быстрой сортировки нормальное функционирование очень неэффективно при предъявлении уже отсортированный список. Отдел будет всегда в конечном итоге, производящая одно суб-массива без каких-либо элементов и один со всеми элементами (минус, конечно же, пункт Pivot). В быстрой сортировки с срединно-троих перегородки пункта стержнем выбирается как среднее между первым элементом, последний элемент, а средний элемент (решили помощью целочисленного деления п / 2). В тех случаях, уже отсортированных списков этой связи должна быть среднего элемента в качестве опорного сокращая тем самым inefficency найти в нормальном QuickSort.

Следующий код показывает, как осуществлять быстрый aortwith срединной из трех разделов и обрезания для малых массивов:


    /**

     * Quicksort algorithm.

     @param a an array of Comparable items.

     */

    public static void quicksortComparable [ ] ) {

        quicksorta, 0, a.length - );

    }

    

    private static final int CUTOFF = 10;

    

    /**

     * Internal quicksort method that makes recursive calls.

     * Uses median-of-three partitioning and a cutoff of 10.

     @param a an array of Comparable items.

     @param low the left-most index of the subarray.

     @param high the right-most index of the subarray.

     */

    private static void quicksortComparable [ ] a, int low, int high ) {

        iflow + CUTOFF > high )

            insertionSorta, low, high );

        else {

            // Sort low, middle, high

            int middle = low + high 2;

            ifamiddle ].compareToalow ] ) )

                swapReferencesa, low, middle );

            ifahigh ].compareToalow ] ) )

                swapReferencesa, low, high );

            ifahigh ].compareToamiddle ] ) )

                swapReferencesa, middle, high );

            

            // Place pivot at position high - 1

            swapReferencesa, middle, high - );

            Comparable pivot = ahigh - ];

            

            // Begin partitioning

            int i, j;

            fori = low, j = high - 1; ; ) {

                whilea++i ].compareTopivot )

                    ;

                whilepivot.compareToa--j ] ) )

                    ;

                ifi >= j )

                    break;

                swapReferencesa, i, j );

            }

            

            // Restore pivot

            swapReferencesa, i, high - );

            

            quicksorta, low, i - );    // Sort small elements

            quicksorta, i + 1, high );   // Sort large elements

        }

    }

    

    /**

     * Method to swap to elements in an array.

     @param a an array of objects.

     @param index1 the index of the first object.

     @param index2 the index of the second object.

     */

    public static final void swapReferencesObject [ ] a, int index1, int index2 ) {

        Object tmp = aindex1 ];

        aindex1 = aindex2 ];

        aindex2 = tmp;

    }

    

    

    /**

     * Internal insertion sort routine for subarrays

     * that is used by quicksort.

     @param a an array of Comparable items.

     @param low the left-most index of the subarray.

     @param n the number of items to sort.

     */

    private static void insertionSortComparable [ ] a, int low, int high ) {

        forint p = low + 1; p <= high; p++ ) {

            Comparable tmp = a];

            int j;

            

            forj = p; j > low && tmp.compareToaj - ] ) 0; j-- )

                a= aj - ];

            a= tmp;

        }

    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>