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

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

  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;
}

 

你可能感兴趣的:(JavaSE)