zoukankan      html  css  js  c++  java
  • 算法二 快速排序

    经典算法  “挖坑填数+分治”

     1 public class QuickSort {
     2     public static void main(String[] args) {
     3         QuickSort quickSort=new QuickSort();
     4         int arr[]={3,5,2,66,7,33,1,4,9,10};
     5         quickSort.quickSort(arr,0,arr.length-1);
     6         for (int num :
     7                 arr) {
     8             System.out.print(num+" ");
     9         }
    10 
    11     }
    12 
    13     public void quickSort(int[] arr, int start, int end) {
    14         if (arr == null || start >= end) return;
    15         int i = start, j = end;
    16         int pivotKey = arr[start];
    17         while (i < j) {
    18             while (i < j && arr[j] >= pivotKey) j--;
    19             if (i < j) arr[i++] = arr[j];
    20             while (i < j && arr[i] <= pivotKey) i++;
    21             if (i < j) arr[j--] = arr[i];
    22         }
    23         arr[i] = pivotKey;
    24         quickSort(arr, start, i - 1);
    25         quickSort(arr, i + 1, end);
    26 
    27     }
    28 }

    看快排代码的时候在想为什么别人总是说先要从后往前比较呢?

    今天研究代码逻辑终于明白了!!!

    选择中枢的时候是 pivotKey=arr[0];

    我们先从后往前查找,

    while (i < j && arr[j] >= pivotKey) j--;

    if (i < j)  arr[i++] = arr[j];

    若找到比中枢小的则直接放在arr[0]的位置,将arr[0]的值覆盖掉了。不要担心,pivotKey存有arr[0]的值。

    此时再从前往后找,碰上比中枢大的值直接放在 arr[j]的位置(arr[j]的值已经存入arr[0])

    =======================================================================================

    若从前往后的话(我的想法)

    将大于中枢的值先放在arr[0]位置,再从后往前查找小于中枢的值存入arr[i],再将arr[0]的值放入arr[j]

    这样挪动好麻烦啊。。。

  • 相关阅读:
    Window 中的自带方法Base64
    React_Class1
    npm 常用操作
    React__生命周期
    axios 简单方法个人理解
    JavaScript_Window对象
    常见的搜索引擎技巧
    JS_String常见问题Demo
    java调用C++代码
    java虚拟机指令dup的理解
  • 原文地址:https://www.cnblogs.com/zhaozishuang/p/11188715.html
Copyright © 2011-2022 走看看