常用的排序算法的和查找算法小结

常用的排序算法的时间复杂度和空间复杂度

排序法最差时间分析    平均时间复杂度    稳定度    空间复杂度

冒泡排序    O(n2)    O(n2)    稳定        O(1)

插入排序    O(n2)    O(n2)    稳定    O(1)

选择排序    O(n2)    O(n2)    稳定    O(1)

二叉树排序    O(n2    )O(n*log2n)    不一定    O(n)

快速排序    O(n2)    O(n*log2n)    不稳定        O(log2n)~O(n)

堆排序    O(n*log2n)    O(n*log2n)    不稳定        O(1)

希尔排序    O        O    不稳定    O(1)



查找算法时间复杂度

查找算法实现:顺序查找 二分查找 二叉树排序查找 哈希表法(散列表) 分块查找


冒泡排序

          冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说排序完成。规模比较小的时候应用冒泡排序,主要应用于教学。。。

选择排序--只会移动N次

         选择排序的主要思想:首先找到数组中最小的那个元素,其次,将它和第一个元素交换。接下来找第二小和第二个交换。运行时间和输入无关,数据移动最少。当数据量较小的时候适用。

插入排序

时间复杂度为O(n^2),数据量小时使用。并且大部分已经被排序。

快速排序

       快速排序是最快的通用排序算法,在大多数实际情况中,快速排序是最佳选择。在java的默认排序中是使用的是三向切分排序。

归并排序

      如果需要稳定,空间不是很重要,请选择归并。

O(n)时间复杂度的桶排序

     当范围已经知道,而且空间不是很重要的情况下使用桶排序。

总结排序

(1)若n较小(如n≤50),可采用直接插入或直接选择排序。

     当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。

(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;

(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。

     快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;

     堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。

     若要求排序稳定,则可选用归并排序。但本章介绍的从单个记录起进行两两归并的  排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子文件,然后再两两归并之。因为直接插入排序是稳定 的,所以改进后的归并排序仍是稳定的。

---------------------


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,670评论 0 13
  • 该系列文章主要是记录下自己暑假这段时间的学习笔记,暑期也在实习,抽空学了很多,每个方面的知识我都会另起一篇博客去记...
    Yanci516阅读 12,814评论 6 19
  • 查找和排序都是程序设计中经常用到的算法。查找相对而言较为简单,不外乎顺序查找、二分查找、哈希表查找和二叉排序树查找...
    eagleRock阅读 5,846评论 0 14
  • 一、 单项选择题(共71题) 对n个元素的序列进行冒泡排序时,最少的比较次数是( )。A. n ...
    貝影阅读 9,470评论 0 10
  • 很多时候,门店都在为增加销售额而绞尽脑汁,不知道怎么办,其实,在我们身边就有很多可以借鉴的例子。 每当...
    许镇勇阅读 2,674评论 2 1

友情链接更多精彩内容