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

    一:概述

      快速排序是东尼.霍尔所发展的一种快速排序算法。

      对于n个项目的排序,平均O(n*logn)次比较,在比较糟糕的情况下是O(n2)次比较。

      采用分治策略把一个串行分为两个子串行。

    二:步骤

    1. 从数列中挑出一个元素,称为 “基准”(pivot)。

    2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

    3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

    三:c语言程序

      

    四:最坏下的时间复杂度

      假设当划分区间的时候,一个区间n-1个元素,一个区间有0个元素。

      并且继续假设每次递归都出现这种情况。

      划分的代价是O(n)。

      对0个元素的递归,T(0)=O(1)。

      所以估计算法的运行时间的递归:T(n)=T(n-1)+T(0)+O(n)=T(n-1)+O(n)

      可以证明T(n)=O(n2

    五:最快情况下的时间复杂度

      划分的每个区间不能大于n/2。

      一个区间为n/2,另一个为n/2-1.

      这种情况下快速算法就快速的多。

      T(n)<=2T(n/2)+O(n)

      可以证明T(n)=O(nlgn)。

  • 相关阅读:
    rabbitmq channel参数详解
    java中反射知识点总结
    SpringBoot的ApplicationRunner
    ServletContextInitializer添加 servlet filter listener
    如何在Job中获取 IOC applicationcontext
    QRCode.js:使用 JavaScript 生成微信二维码
    SpringBoot整合Quartz
    java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet解决
    javascript简介
    mysql索引
  • 原文地址:https://www.cnblogs.com/juncaoit/p/5935978.html
Copyright © 2011-2022 走看看