zoukankan      html  css  js  c++  java
  • 数据结构之内部排序个人总结

      内部排序简单来说,就是在内存中存放待排序数据元素进行排序的过程。

      内部排序简单分为:插入排序,快速排序,选择排序,归并排序,基数排序。

      一、插入排序:

           1、直接插入排序:利用顺序查找在已形成的有序表中查找,在适当的位置插入待插入元素,后面元素的地址向后顺移。

            时间效率:O(n2),空间效率:n(1),算法稳定,链表结构效率更高。

           2、折半插入排序:在已形成的有序表中折半查找,在适当位置插入,后面元素向后顺移。查找过程中每次比较待插入元素和子表中MID元素,确定下一次查找的子表。

            时间效率:O(n2),空间效率:n(1),算法稳定,链表结构无法进行“折半”。

            如图:

           3、希尔(shell)排序:将相隔某个增量的两个记录两两排序,不断缩小增量至1为止来不断重复这个过程,先作“宏观”调整,再做“微观”调整。

            时间效率:O(n1.25)~O(1.6n1.25)——经验公式(大量的实验统计资料得出),空间效率:n(1),算法不稳定,不容易在链表上实现。

            如图:

      二、快速排序:

           1、气泡排序:相邻记录两两比较并交换。

            时间效率:O(n2),空间效率:n(1),算法稳定,必须是顺序存储结构。

           2、快速排序:对气泡排序的改进,在待排序元素中任取一元素作为中心,所有比它小的元素一律前放,所有比它大的元素一律后放,形成左右两个子表,在子表中重复这一过程        至序列有序。

            时间效率:O(nlog2n) —因为每趟确定的元素呈指数增加,空间效率:O(log2n)—因为算法的递归性,要用到栈空间。算法不稳定。

      三、选择排序:

          1、简单选择排序(又称为直接选择排序):在待排序序列中选择最小的一个元素放置于序列靠前的位置,在无序序列中不断重复这3个过程至序列有序。

            时间效率:O(n2),空间效率:n(1),算法不稳定。

          2、树型选择排序:对n个记录两两比较,选择其中较小的,再对这些较小的两两比较,选出较小的,重复至找到最小元素,之后将其输出,要找次小关键字只需将叶子结点中的最        小关键字改为“最大值” ,然后从该叶子结点开始,重复上述步骤即可。

            时间效率:O(n㏒2n),空间效率较差 。

          3、堆排序:堆是一棵采用顺序存储结构的完全二叉树,堆的根结点是关键字序列中的最小(或最大)值,利用堆顶记录的关键字值最小(或最大)的性质,从当前待排序的记录中依次        选取关键字最小(或最大)的记录,就可以实现对数据记录的排序。当输出堆顶元素后,以堆中最后一个元素替代之;然后将根结点值与左、右子树的根结点值进行比较,并与        其中小者进行交换;重复上述操作。

            时间效率:O(n㏒2n),空间效率:n(1)。

      四、归并排序:是指将两个或两个以上的有序序列合并成一个有序序列。若采用线性表易于实现。

          初始时,将每个记录看成一个单独的有序序列,则n个待排序记录就是n个长度为1的有序子序列,之后对所有有序子序列进行两两归并,得到n/2个长度为2或1的有序子序列       ——一趟归并;重复上述步骤 ,直到得到长度为n的有序序列为止。

      五、基数排序:待补充。

        

  • 相关阅读:
    近况说明
    【模板】Johnson 全源最短路
    富文本编辑器,webbrowser控件 document.execCommand() 解析
    Visual studio 2010 工具箱名称不显示的原因
    利用批处理bat实现 【QQ批量登陆】
    ESPCMS 使用上碰到的一些问题记录
    Java虚拟机的GC垃圾回收机制(garbage collection)
    垃圾回收机制及循环引用
    C++ 的强引用和弱引用
    (转载)Linux的file descriptor笔记
  • 原文地址:https://www.cnblogs.com/bbly02/p/6617302.html
Copyright © 2011-2022 走看看