数据结构排序总结

【0】README

0.1) 本文总结于 数据结构与算法分析+个人的学习心得体会,源代码均为原创;
0.2) 本文列出了数据结构中基本上所有的数据结构排序算法, 整理了相关的博文(源代码);
0.3)对于数据结构排序的遗憾是, 这个排序,哥子已经搞了整整1周了,搞乏了,所以没有实现 以 Sedgewick 增量序列 { 或者是 9*4^i - 9*2^i + 1或者是 4^i - 3*2^i + 1; 如,1, 5, 19, 41,……} 的希尔排序 源代码, 其时间复杂度为O(N^(7/6)),等有时间再来实现;其实也不难,因为我已经实现了希尔排序的 hibbard增量序列 {1, 3, …, 2^k-1},其时间复杂度为O(N^(3/2));所以还是有必要实现Sedgewick 增量序列 的希尔排序的(等心情好了,哈哈,心情好了,对的,就来实现它),哎,确实该换换口味了;


【1】总结(Conclusion):

C1)对于最一般的内部排序,选用的方法不是插入排序、希尔排序,就是快速排序,它们的选用主要是根据输入的大小来决定的; 下图显示了每个算法运行的时间对比:
这里写图片描述

  • (对上述图片的说明)(Declaration)
    • D1)选择N个整数组成一些随机排序,而表中给出 的各项仅仅是 排序的实际时间;
    • D2)我们看到,快速排序的性能是比较高的(待排序元素个数大于10),其次是希尔排序, 然后插入排序(待排序元素个数小于10);
    • D3)数据结构排序算法性能排行榜
    • 这里写图片描述

C2)希尔排序: http://blog.csdn.net/pacosonswjtu/article/details/49660799

  • C2.1)该程序如果改为使用 Sedgewick 增量 { 或者是 9*4^i - 9*2^i + 1或者是 4^i - 3*2^i + 1; 如,1, 5, 19, 41,109, …… } 运行,基于数以百万次计排序的话, 大小从100~ 25 000 000 不等, 使用这种增量的希尔排序预计的运行时间估计为 O(N^(7/6));(而如果使用 hibbard增量序列 的话, 最坏情况是 Ω(N^(3/2)) )
  • 这里写图片描述
  • C2.2)对输入数据随机的假设是不安全的。如果你不想过多考虑这个问题,那么你就使用希尔排序。希尔排序的最坏情况也只不过是 O(N^(4/3));

C3)堆排序: 堆排序要比希尔排序慢, 尽管它是一个带有明显紧凑内循环的 O(NlogN)算法。对该算法的深入考察揭示出, 为了移动数据,堆排序需要进行两次比较; http://blog.csdn.net/pacosonswjtu/article/details/49660909
C4)快速排序:注意它选取枢纽元 时 所使用的方法是 三数中值分割法,截止范围为10(也就是,如果排序的数组个数小于10, 就不选择快速排序, 而是选择其他排序方法, 如希尔排序或插入排序); http://blog.csdn.net/pacosonswjtu/article/details/48879419

  • C4.1)快速排序的改进算法仍然有 O(N^2)的最坏情况, 但是,这种最坏情况出现的机会是如此地微不足道,以至于并不影响算法的性能;
  • C4.2)切记,永远不要图省事,把第一个元素作为枢纽元(而是采用三数中值分割法)
  • C4.3) 而且由 快速排序,我们还引入 了 快速选择算法,参见: http://blog.csdn.net/pacosonswjtu/article/details/48915197
    C5)插入排序:插入排序只用在小的或是非常接近排好序的输入数据上。 http://blog.csdn.net/pacosonswjtu/article/details/48879263
    C6)归并排序:我们并没有包含进来归并排序, 因为它的性能对于主存排序不如快速排序那么好, 而且他的编程一点也不省事; http://blog.csdn.net/pacosonswjtu/article/details/49661005
    C7)外部排序:合并是外部排序 的思想;
    C8)桶排序+基数排序: 在某些特殊情况下以线性时间运行仍然是可能的,比如桶排序或者 基数排序(等同于多次桶排序);
    http://blog.csdn.net/pacosonswjtu/article/details/49687193 + http://blog.csdn.net/pacosonswjtu/article/details/49685749

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS负载均衡-Application Request Route详解第六篇:使用失败请求跟踪规则来诊断ARR

失败请求跟踪规则(FailedRequest Tracing Rules)是IIS7中对请求处理进行诊断的强大的工具。我们本篇文章将会带领大家一步步的来配置失败请求跟踪规则,并且告诉大家如何使用这些信息来诊断ARR。 要真正的理解本篇文章要讲述的知识&#xff0c…

减一天 日期函数_一文掌握excel中的日期函数

在excel中,因为日期的特殊性,大部分关于日期的运算都要用到特有的函数。对于大多数小伙伴们可能没有专门去学习过日期函数都有哪些?如何运用?可以实现什么样的功能?今天小编就为大家整理出来并详细介绍一下常用的日期函…

软件开发的微信公众号分享

一、已阅 (1)程序员面试(mvpjob)(2)程序员小灰(chengxuyuanxiaohui)(3)Hollis(hollischuang)(4)Java技术栈&am…

算法递归简论

【0】README 0.1) 本文总结于 数据结构与算法分析,旨在了解设计 递归程序 的相关法则和技巧; 0.2) 我记忆尤新的一点是: 凡事可以用循环代替的递归函数,它就不是一个好的递归函数,对我帮助很大…

python三维矩阵可视化_科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)...

Mlab了解Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化。过程为:.建立数据源.使用Filter(可选)对数据进行加工.添加可视化模块,我们可以通过修改可视化模块的属…

程序员求职面试三部曲之二:提高面试的成功率

一、选择有招聘诚意的企业 一则好的招聘信息应该是准确、清晰和真实的。任何夸大宣传、提供虚假信息的企业都可以认为缺乏招聘诚意。 我们通过解读企业的招聘信息,主观上能够判断这家企业是否很有招聘诚意,我觉得主要体现为以下两个方面: 1.、…

秒杀系统设计的 5 个要点:前端三板斧+后端两条路

转载自 秒杀系统设计的 5 个要点:前端三板斧+后端两条路高并发,cache,锁机制基于缓存架构redis,Memcached的先进先出队列。稍微大一点的秒杀,肯定是分布式的集群的,并发来自于多个节点的JVM,syn…

http响应消息的响应状态码和意义

200:表示一切正常;400:无效请求,指出客户机请求中有不正确的语法格式;404:找不到, 服务器上不存在客户机所请求的资源;(常见状态码)405:不允许此请…

python网络模块_Python的pyroute2网络模块-阿里云开发者社区

Pyroute2是纯python的netlink库,只需要python标准库不需要其他第三方的库。最常用的是监控事件,例如监控磁盘空间事件:from pyroute2 import DQuotSocketwith DQuotSocket() as ds:for messagein ds.get():print(message)或者监控IP路由from …

ASP.NET Core 开发-中间件(Middleware)

ASP.NET Core开发,开发并使用中间件(Middleware)。 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件。 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组分在管道中调用之后执行特定操作。 具体如图: 开发中间…

高性能、高可用平台架构的演变过程

转载自 高性能、高可用平台架构的演变过程开篇概述 在如今移动互联网、互联网、大数据的时代,各类的互联网网站、平台异常突起,如同雨后春笋,有种“忽如一夜春风来,千树万树梨花开”感觉。 对于移动互联网时代的平台来说&#xff…

6 使用soap客户端_网络协议 20 - RPC 协议(上)- 基于XML的SOAP协议

上一节我们了解 RPC 的经典模型和设计要点,并用最早期的 ONC RPC 为例子,详述了具体的实现。而时代在进步,ONC RPC 逐渐因为各种问题被替代,SOAP 协议就是替代者之一。ONC RPC 存在的问题ONC RPC 将客户端要发送的参数&#xff0c…

关于HashMap容量的初始化,还有这么多学问

转载自 关于HashMap容量的初始化,还有这么多学问在《HashMap中傻傻分不清楚的那些概念》文章中,我们介绍了HashMap中和容量相关的几个概念,简单介绍了一下HashMap的扩容机制。文中我们提到,默认情况下HashMap的容量是16&#xff0…

Microservice Anti-patterns

在最近的一次Microservices Practitioner Summit中,原Netflix工程师介绍了一种越来越常见的对Microservice的误用。简单地说,大家在搭建一个基于Microservice的服务时常常依赖同一套类库,进而使得Microservice中的各个子服务无法选择最适合的…

css 图片换行_好程序员web前端学习路线分享CSS浮动-文档流篇

1、纯文本的排列。文档流就像我们的文本内容一样,所有的文字都会紧挨着,一个个排列下来,如果到了边界,就会换一行排列。当然如果敲回车或者按下空格键一般都会认为是一个词间距,因为英文中每个单词之间是有距离的&…

京东购物车的 Java 架构实现及原理

转载自 京东购物车的 Java 架构实现及原理 今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码  问:购物车商品还在吗? 2)用户登陆了用户名密…

程序员求职面试三部曲之三:快速适应新的工作环境

新进一家公司总有各种的不适应,或兴奋, 或紧张,或不安,或迷茫各种情绪兼而有之。曾经有个家伙好不容易进了A公司,本来是要替代另一位即将离职的小伙伴的,结果,走得比那位兄弟还快,只…

问的书写规则是什么意思_化学式的定义及其书写规则

化学式的定义及其书写规则化学式是用元素符号表示纯净物组成及原子个数的式子。分子晶体的化学式叫做分子式,可以表示这种物质的分子构成。下面是百分网小编给大家整理的化学式的简介,希望能帮到大家!化学式的定义用元素符号表示纯净物组成及原子个数的式…

微软企业应用开发三大方向:跨平台、开放/开源与DevOps

软件和互联网正在改变传统企业,软件的职能逐渐从管理内部员工变成核心的商业竞争能力,在今天这种大环境下,我们应该用的新开发技术和方法。微软公司全球资深副总裁、开发平台事业部潘正磊(Julia)认为,把IT托…

Java程序员最常犯的 10 个错误

转载自 Java程序员最常犯的 10 个错误 这个列表总结了Java开发人员经常犯的10个错误。一 、把数组转成ArrayList 为了将数组转换为ArrayList,开发者经常会这样做: List list Arrays.asList(arr); 使用Arrays.asList()方法可以得到一个ArrayList&…