zoukankan      html  css  js  c++  java
  • 简单的三种排序

    桶排序:思路是,申请足够数量的空间去存放可能出现的值,循环所有的值,把对应值得地方进行标记,然后依据值得大小输出排序的顺序。

    例子:2 5 8 6 1 4

    申请数组a[8]

    出现一个数,a[那个数] = 1;

    最后循环数组,值为1的输出即可。

    冒泡排序:思路是,不停的比较前后两个数,如果顺序不对就交换,每次都在大的数放在后面,每一次循环就能把最大的数冒出来。

    例子:2 5 8 6 1 4

    比较 2 5,正常,不动

    比较 5 8,正常,不动

    比较 8 6,不对,交换

    比较 8 1,不对,交换

    比较 8 4,不对,交换

    最后8就冒出来了,多次循环之后就能排序完成,值得注意的是,每次循环可以少循环一个数,因为那个数已经冒泡出来了,比如下一次就不用和8比较了。

    快速排序:思路是,找一个标志数放置在首位,然后根据这个标志数从首末两头寻找,找到一个大于标志数,一个小于标志数的两个数,然后交换两个数,最后当碰头时,碰头数和标志数交换位置,然后此时在比较标志数的左边序列利用上面的方法再来一次,右边也一样

    例子:2 5 8 6 1 4

    2为标志数

    从后头4开始,我们向前找,找到了1比2小

    从前头2开始,我们向后找,找到了5比2大

    交换5和1

    原序列变成  2 1 8 6 5 4

    从后头5开始,我们向前找,找到了1比2小(碰头了)

    交换 1 和 2

    原序列变成  1 2 8 6 5 4

    然后是2左边的序列已经齐了

    2右边的序列利用之前的方法进行排序即可

    总结:桶排序时间复杂度O(N+M),冒泡排序O(N^2),快速排序O(N logN),实际之中我经常就是一个sort()就代替所有的方法,没有理解其中的排序算法,所以有时候方便就会造成不懂的漏洞。

  • 相关阅读:
    C#学习笔记(委托)
    C#学习笔记(函数——如何在函数中传入传出参数)
    C#学习笔记(隐式和显式转化、枚举类型、结构类型、数组类型和字符串)
    C#学习笔记(流程语句)
    C#学习笔记(基本语法)
    java调用exe,及调用bat不成功的解决办法
    JS数组去重精简版
    根据经纬度坐标获取位置信息(基于百度地图)
    图解算法习题之老王的杂货铺
    JS中的MOD运算
  • 原文地址:https://www.cnblogs.com/linkstar/p/5233206.html
Copyright © 2011-2022 走看看