• 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)。

  • 相关阅读:
    连接APB1和APB2的设备有哪些
    STM32串口配置步骤
    gcc -o test test.c编译报错
    EmBitz1.11中将左边的目录弄出来
    c51
    c51跑马灯
    51 单片机 跑马灯2
    51 单片机 跑马灯
    spring注解注入:<context:component-scan>以及其中的context:include-filter>和 <context:exclude-filter>的是干什么的?
    Cookie和Session的作用和工作原理
  • 原文地址:https://www.cnblogs.com/juncaoit/p/5935978.html
Copyright © 2020-2023  润新知