java--快速排序

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--快速排序)