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

      快速排序是一种不稳定的排序(其余的不稳定排序有堆排序,直接选择排序,希尔排序),而且是目前已知最快的排序算法。原理不再说了,直接上代码。  

    首先是一次划分的实现

      int partition(int arr[], int low, int high):将arr中小于arr[low]的元素放在左半部分,大于arr[low]的元素放在右半部分

     1 int partition(int arr[], int low, int high)
     2 {
     3     int pivotkey = arr[low], rc = arr[low];
     4 
     5     while(low < high)
     6     {
     7         while(low < high && arr[high] >= pivotkey) --high;
     8         arr[low] = arr[high];
     9         while(low < high && arr[low] <= pivotkey) ++low;
    10         arr[high] = arr[low];
    11     }
    12 
    13     arr[low] = rc;
    14     return low;
    15 }

    然后是快速排序的主程序:

      void quicksort(int arr[], int low, int high): 将[low:high]范围内的所有元素作快速排序

     1 void quicksort(int arr[], int low, int high)
     2 {
     3     int pivotloc;
     4     if(low < high)
     5     {
     6         pivotloc = partition(arr, low, high);
     7         quicksort(arr, low, pivotloc-1);
     8         quicksort(arr, pivotloc+1, high);
     9     }
    10 }

       需要注意的是,在我们的partition中,如果arr是有序的,则快速排序的最坏性能是O(n*n),所以为了找到更好的枢纽,有时候需要在partition中找出arr[low], arr[high]和arr[(low+high)/2]三个元素中的中间值作枢纽,这样能有效避免上面的这种最坏情况。

    Over~

  • 相关阅读:
    setuptools使用
    YOLO解读
    Linux下配置Python的独立虚拟环境
    交叉熵(Cross Entropy)
    OpenCV-C++ Canny算法介绍
    OpenCV-C++ Laplance算子
    【模型部署】TF Serving 的使用
    OpenCV-C++ Sobel算子使用
    OpenCV-C++ 图像卷积计算的边缘问题
    OpenCV-C++ 自定义线性滤波
  • 原文地址:https://www.cnblogs.com/cobbliu/p/2513417.html
Copyright © 2011-2022 走看看