十大排序算法-------【快速排序】详解(Java源码)

版权声明:本文为changeyd原创文章,未经changeyd允许不得转载。谢谢合作 https://blog.csdn.net/qq_40223688/article/details/88618864

快速排序的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以通过分别对这两部分序列继续进行排序,以达到整个序列排序。

  1. 算法描述:
    1. 快速排序使用分治法来把一个串(list)分为两个子序列。具体如下:
      1. 从序列中挑出一个元素。称为“基准”(通常是选取序列第一个元素,然后以他内容为标准)
      2. 重新排序数列,所有比基准小的放到左边,比基准大的放到右边。(相同的随意)。然后在这个分区退出后,该基准就处于序列的中间位置。这称作分区。
      3. 然后递归的重复i~ii操作左右序列。
  2. https://images2017.cnblogs.com/blog/849589/201710/849589-20171015230936371-1413523412.gif
  3. 代码:
private static void kuaiSu(int[] intArray) {

        kuaiSu2(intArray, 0, intArray.length - 1);

}



public static void kuaiSu2(int[] intArray, int start, int end) {

        if (start >= end) {

               return;

        }

        int index = fenqu(intArray, start, end);



        kuaiSu2(intArray, start, index - 1);

        kuaiSu2(intArray, index + 1, end);

}



public static int fenqu(int[] intArray, int start, int end) {

        // 固定的切分方式

        int key = intArray[start];

        while (start < end) {

               while (intArray[end] >= key && end > start) {// 从后半部分向前扫描

                      end--;

               }

               intArray[start] = intArray[end];

               while (intArray[start] <= key && end > start) {

                      start++;

               }

               intArray[end] = intArray[start];

        }

        intArray[end] = key;

        return end;

}

 

猜你喜欢

转载自blog.csdn.net/qq_40223688/article/details/88618864
今日推荐