zoukankan      html  css  js  c++  java
  • 常用排序算法

    插入排序(直接插入排序,希尔排序)
    选择排序(简单交换排序,堆排序)
    交换排序(冒泡排序,快速排序)
    归并排序
    基数排序
    //上面的都属于内部排序,何为内部排序呢,只要排序都是在内部完成的就较内部排序,如果内存不能装下这些数据,而且要用到外存,就叫外部排序

    插入排序:
         57 68 59 52------68>57  不处理
                          ------59跟 57   68 进行比较,找到合适的位置进行插入
         57 59 68 52------52 和57 59   68 进行比较,找到合适的位置插入
        52 57 59 68  ----最终结果
    Shell排序(插入排序的改进算法),其基本思想每一套都按照确定的间隔.使小的元素可以跳跃前进,缩小跳进直至为1
    57 68 59 52 73 28 96 33 24 19
    间隔用d=n/2=5
    57 28        一组其他的类似的
    28  57     68  96    33   59  
    ----28 668 33 24 19 57 96 59 52 72
    接下来d=d/2(步长一定为整数,第二一定要取基数)3=5/2
    依次进行排序
      28 68 33 24 19 57 96 59 52 72
    最后:d=d/2=1
    19 24 28 33 52 57 59 68 72 96 -------最终结果 

    选择排序:
    简单选择排序
    57 68 59 52
    最小值为52 和第一个交换  52 68 59 57
    最小的是 57 和第二个交换  52  57 59 68
    最小的为59 不需要交换   完成

    堆排序:
    什么是堆:n个元素的序列,满足父节点比子节点都要小或比他们都大,就是堆了
                         1
                     2         3
                 4     5    6     7
              8     9

    上面就是一个最小堆

    56   79   56   38   40   84  建立最大堆
    我们只需要把它们按照完全二叉树填入
    因为   i<=n/2 就是有当父节点的
    所以 i最大为第三个   56    和   84  交换
    再看   79   和38   40 比较,不用换
    再看   56     79   84 比较    和84 交换
    84   79   56   38   40  46  再进行依次调整

    再把   84---46 进行对调并断开指针  得到   84
    再进行重新建立堆      依次类推   直到所有元素都取出来了   就是一个从大到小的堆
    到这里,堆排序就完成了

    交换排序:

    一:冒泡排序算法:
    57  68   59   52   
    --------(倒数第一个元素)52和59进行排序   如果最后一个元素比倒数第二个元素小,交换
    57 68    52   59
    -------(倒数第二个元素)52和68   ,交换
    57  52   68  59
    -------------------52和57
    52   57    68  59
    -------对剩下的3个元素进行冒泡
         57     68   59
    ----------59 和68  交换
      57    59   68
    ----------59和 57  不交换
    57   59    68
    ---68 和59 比较
    完成


    快速排序的思想:
    采用分治法把大问题分解为同类型的小问题
    拿出一个元素,把比它大的放一边,小的放另外一边
    又用同样的方法,对抓出一个  元素   ,同样的处理
    一步步的下去就把每一个小系列的都弄出来的,把结果拼合一下,就成功了
    57   68    59   52   72   28   96   33   24   19

    --19   68    59   52   72   28   96   33   24   57
    ---19--68  57   68    59   52   72   28   96   33   24   19


    归并排序:
    57 68    59  52   72 28   96  33
    57  68    52  59   28  72   33  96
    接下来是四个四个一起然后有两个指针一个52   57 比较,然后交换
    68和59比较然后进行交换

    最后把这个系列组成一个更大的系列就形成了我们的答案.

    基数排序:
    这是一种比较简单的排序方法,因为它的过程比较容易,我们这里就不介绍了

    使用合并操作来完成排序的算法


    下面是各种算法的复杂读:

  • 相关阅读:
    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
    纷享集成API函数注意点
    纷享开发注意事项:
    Oracle操作表的常见语法
    数据库中的自连接怎么理解
    decode()和SQL语法case表达式
    浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals来判断
    vue-seamless-scroll 无缝滚动
    vue 实现表格无缝滚动
    echarts5 在vue3 中tooltip显示不出来
  • 原文地址:https://www.cnblogs.com/xianqingzh/p/1134529.html
Copyright © 2011-2022 走看看