zoukankan      html  css  js  c++  java
  • 排序

    记录一下几种排序:

     One:桶排序

    桶排序:例如需要排序数的范围是0~n,那你则需要申请n+1一个变量,也就是说要写成int a[n+1]。应为我们需要用n+1个“桶”来存储0~n每一个数出现的次数。

    即便只给你5个数进行排序(例如这五个数是1、2100000、12358、6546和8787),你任然需要2100000个“桶”,这就浪费空间!还有,如果现在需要排序

    的不再是整数而是一些小数,比如将5.1、1.323、4.54、5.43、1.23这五个数进行从小到大排序又该怎么办呢?当然桶排序针对连续数其值范围较小,还是

    很简单、快捷的。算法复杂度O(2*(m+n)),当然了O用来表示时间复杂度,可忽略较小常数O(M+N)。

    Two:冒泡排序

    冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们顺序错误就把他们交换过来。冒泡排序的核心部分是双重嵌套循环。复杂度是O(N^2)。

    Three:快速排序

    快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个元素要O(nlogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算法更快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来。

    快速排序使用分治策略(Divide and Conquer)来把一个序列分为两个子序列。步骤为:

    1. 从序列中挑出一个元素,作为"基准"(pivot).
    2. 把所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准的后面(相同的数可以到任一边),这个称为分区(partition)操作。
    3. 对每个分区递归地进行步骤1~2,递归的结束条件是序列的大小是0或1,这时整体已经被排好序了。
  • 相关阅读:
    C++11的enum class & enum struct和enum
    c++11 中成员变量初始化的顺序
    c++11 lambda
    Java-NIO
    .Net之路(十五)图解LoadRunner压力測试
    activiti入门3排他网关,并行网管,包括网关,事件网关
    [移动端]移动端上遇到的各种坑与相对解决方式
    《软件调试艺术》读后感四
    [C++设计模式] command 命令模式
    iOS学习笔记23-音效与音乐
  • 原文地址:https://www.cnblogs.com/coniglio/p/10044973.html
Copyright © 2011-2022 走看看