排序总结(笔试教训)

前言

        在这一周里收到了两份笔试的通知,两家试卷都有不少的或涉及原理或设计特点的排序题,对排序一知半解的我吃了不少亏,今天写这篇博文对排序做一下整理。

概述

        较为重要的排序有冒泡排序,选择排序,插入排序,归并排序,快速排序与堆排序,这些在这两次笔试中或多或少都有出现,就针对这几个排序进行算法原理与特点的整理。

各排序算法原理

    冒泡排序

        冒泡排序就是不断比较相邻的元素,大的元素排后面,小的排前面,每一次循环比较出一个最大值放在右边,直到所有元素都两两比较过循环才结束。

冒泡排序

    选择排序

        遍历未排序列,每次循环将最大或最小值记录,一次循环结束后将最大或最小值放在队头或队尾。

选择排序

    插入排序

        从第一个数开始,将序列当作一个有序序列进行排序,每次都将循环到的数插入到前面的有序序列中,直到所有元素完成插入,序列就变得有序了。

插入排序

    归并排序

        递归的思想,将数组分成两半,再对两侧的数组归并排序再整合两半数组,整合的规则是比较两半最小值,小的先存放在另外开辟的空间中,直到一个数组遍历完成,将另一个数组未遍历部分(数组已排完序)放进开辟的空间的后面。

归并排序

    快速排序

        每次将未排序序列的第一个数作为基数,后面每个数与这个基数进行比较,小的放在这个基数的前面,大的放在这个基数的后面,直到所有元素都当过基数,排序结束。

快速排序

    堆排序

        堆排序运用类似二叉树的堆积的形式完成排序,先将所有元素依次放入这个类似二叉树的结构中,从下至上将三个数中较大值放在根节点位置,直到根节点为最大值。之后根节点放在外面,取出最后一个节点放在根节点位置,与子节点比较,较大的放在根节点位置,一次循环直到取出的最后一个节点找到它相应的位置停止,然后重复取出根节点和最后一个节点的操作,直至排序结束。

堆排序

    拓展

        基础排序算法还有计数排序,桶排序,基数排序等。

        计数排序非排序算法,使用该算法要求序列中所有值在较小的范围内且重复出现多次,它会建立一个较大的数组如(1-100)存储数出现的次数,再依1-100的次序输出。

        桶排序是分为固定的多个区间即桶,如0-9,10-19,20-29,将所有数据按他们自身大小存入桶中,桶中使用何种算法试情况而定。

        基数排序是将一个数的每位数进行拆分再进行排序。

拆分排序

各排序算法特点

        主要关注时间复杂度与稳定性。

        时间复杂度即程序执行程序需要的时间,可以简单理解成循环中的次数。

        稳定性是看排序过程中,同权重的值(简单理解就是值相等)排序前后前后位置关系是否改变。

排序特点

    总体的速度上(归并、堆)> 快速 >(冒泡、插入)> 选择



参考网站:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。