zoukankan      html  css  js  c++  java
  • 排序技术

    一、插入排序

      直接插入排序:依次将待排序序列中的每一个记录插入到已排好序的序列中,直到全部记录都排好序;(折半插入排序)O(n^2)

      希尔排序:先将整个待排序记录序列分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序;O(nlog2n)-O(n^2)

    二、交换排序

      起泡排序:两两比较相邻记录,如果反序则交换,直到没有反序记录为止;O(n^2)

      快速排序:首先选一个轴值,将待排序列划分成两部分,左侧记录均小于或等于轴值,右侧记录均大于或等于轴值,然后分别对这两部分重复上述过程,直到整个序列有序;O(nlog2n)

    在快速排序中,记录的比较和移动从两端向中间进行,值较小的记录一次就能从后面移动到前面,记录移动的距离较远,从而减少了总的比较次数和移动次数;

    三、选择排序

      简单选择排序:第i趟排序在待排序序列ri---rn中选取最小记录,并和第i个记录交换作为有序序列的第i个记录;O(n^2)

      堆排序:首先将待排序序列构造成一个堆,此时,选出了堆中所有记录的最大者即堆顶记录,然后将堆顶记录移走,并将剩余的记录再调整成堆,这样就找出了次大的记录,依次类推,直到堆中只有一个记录。O(nlog2n)    简单选择排序在一趟排序中仅选出最小记录,没有把一趟的比较结果保存下来,因而记录的比较次数较多。堆排序在选出最小记录的同时,也找出较小记录,减少了选择的比较次数,从而提高整个排序的效率。

    四、归并排序

    二路归并排序:将待排序序列划分为两个长度相等的子序列,分别对两子序列进行排序,得到两个有序子序列,再将这两个有序子序列合并成一个有序序列;O(nlog2n)---递归,非递归;

    五、基数排序

    借助对多关键码进行分配和收集的思想对单关键码进行排序;将待排序记录看成由若干个子关键码复合而成,然后采用分配和收集的方法采用LSD(最次位优先)方法进行排序; 

  • 相关阅读:
    时间,关机重启及网络常识
    bash xshell 特性
    Http介绍
    rsync 守护进程模式小记
    定时任务+邮件发送 小记
    4.iptables的匹配条件(一)
    3.iptables规则管理
    2.iptables规则查询
    1.iptables概念
    4.LVS实验构建
  • 原文地址:https://www.cnblogs.com/Cloud-king/p/8877590.html
Copyright © 2011-2022 走看看