美文网首页
java--快速排序

java--快速排序

作者: android_coder | 来源:发表于2021-04-27 23:36 被阅读0次

    1:基本思想:

    快速排序是属于交换类排序,采用不断的比较和移动来实现排序。快速排序是一种非常高效的排序算法,它的实现,增大了记录和比较和移动的距离,从而减少总的比较此时和移动次数。采用分而治之的思想,将一个大的问题拆成一个小的问题,小的问题拆成更小的问题。
    快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    步骤为:

    1:从数列中挑出一个元素,称为"基准"(pivot)
    2:重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
    3:递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
    递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去

    快速排序的分析

    11.png

    代码实现

     private static int[] quickSortIntArray(int[] array, int start, int end) {
            if (start > end) {
                return array;
            }
            int middle = array[start];
            int left = start;
            int right = end;
            while (left < right) {
               //如果右边的值比左边大指针继续往左移动
                while (left < right && array[right] > middle) {
                    right --;
                }
                array[left] = array[right];//右边的值移到左边的位置
               //如果左边的值比右边小指针继续往右移动
                while (left < right && array[left] <= middle) {
                    left++;
                }
                array[right] = array[left];
            }
            array[left] = middle;
            quickSort(array, start, left - 1);
            quickSort(array, left +1, end);
            return array;
        }
    

    相关文章

      网友评论

          本文标题:java--快速排序

          本文链接:https://www.haomeiwen.com/subject/gedmrltx.html