几种排序算法的比较转自http://blog.csdn.net/keenweiwei/article/details/3697452
1冒泡排序:
已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先找出这组数据中最大值,将a[1]与a[2]比较,若a[1]大,则交换两者的值,否则不变,在继续将a[1]与a[3]比较,。。。。最后找出最大值a[n];在用同样的方法找出次大值,依次类推,a[n]就以升序排列;
优点:稳定,比较次数已知;缺点:慢,每次只移动两个数据,移动数据的次数多;
二选择排序:
已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先比较a[1]与a[2]的值,若a[1]大于a[2],则交换两者的值,否则不变,在比较a[1]与a[3]的值,若a[1]大于a[3]则交换两者的值,否则不变,依次类推,得到a[1]肯定是最小的在依次找出次小值,;
优点:稳定,比较次数与冒泡一样,数据移动次数比冒泡少;缺点:相对之下还是慢
三插入排序:
已知一组升序排列数据a[1],a[2]...a[n],一组无序排列数据b[1],b[2],b[3]....b[n],需将二者合并成一个升序数列;首先比较b[1]与a[1]的值,若b1大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a2,则继续跳过,直到b1小于a数组中的某一个数据ax,则将ax-an分别向后移动一位,将b[1]插入ax位置,b2到bm用同样方法插入(若无数组a,可将b1当做n=1的数组a);
优点:稳定,快;缺点:比较次数不一定,比较次数越多,插入点给后的数据移动的越多,特别是数据量庞大的时候,不过链表可以解决这个问题;
四希尔排序(缩小增量排序)
已知一组无序数据a1,a2,a3,a4.。。an;需将其安升序排列,发现当n不大时,插入排序的效果很好,首先取一增量d(d<n),将a1,a(1+d),a(1+2d)。。。列为一组,a2,a(2+d),a(2+2d)。。。列为一组ad,a2d,a3d。。。列为一组,依次类推,在各组内分别用插入排序,然后取d‘小于d,重复上述操作,知道d=1;
优点:快,数据移动少;缺点:不稳定,d的取值多少,应取多少个值,都无法确切知道,只能凭经验;
五快速排序
是冒泡排序的改进版,是目前已知最快的排序算法,已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先任取数据ax作为基准,比较ax与其他数据并排序,使ax排在数据的第k位,并且使a1-a(k-1)中每一个数据都小于ax,a(k+1)-an中的每一个数据都大于ax,然后采用分治的策略分别对a1-a(k-1)与a(k+1)-an两组数据进行快速排序;
优点:极快,数据移动少,缺点:不稳定
几种排序算法的比较转自http://blog.csdn.net/keenweiwei/article/details/3697452的更多相关文章
- 排序算法 ----(转载::http://blog.csdn.net/hguisu/article/details/7776068)
1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第1个记录看成是一个有序 ...
- Golang拼接字符串的5种方法及其效率_Chrispink-CSDN博客_golang 字符串拼接效率 https://blog.csdn.net/m0_37422289/article/details/103362740
Different ways to concatenate two strings in Golang - GeeksforGeeks https://www.geeksforgeeks.org/di ...
- spring加载hibernate映射文件的几种方式。转自:http://blog.csdn.net/huiwenjie168/article/details/7013618
在Spring的applicationContext.xml中配置映射文件,通常是在<sessionFactory>这个Bean实例中进行的,若配置的映射文件较少时,可以用sessionF ...
- 比较C++中的4种类型转换方式(转自http://blog.csdn.net/hrbeuwhw/article/details/7884797)
C++的四种cast操作符的区别 Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通 ...
- 4种方法让SpringMVC接收多个对象(转:http://blog.csdn.net/lutinghuan/article/details/46820023)
问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理? 第1种方法:表单提交,以字段数组接收: 第2种方 ...
- 单点登录的三种实现方式 转自: https://blog.csdn.net/python_tty/article/details/53113612
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...
- <转载> 22种代码味道(Martin Fowler与Kent Beck) http://blog.csdn.net/lovelion/article/details/9301691
Martin Fowler在Refactoring: Improving the Design of Existing Code(中译名:<重构——改善既有代码的设计>)一书中与Kent ...
- Android 利用cursor来进行排序(转至http://blog.csdn.net/yangzongquan/article/details/6547860)
主要思路是:override move系列的方法,让cursor以自己想要的顺序来移动,从而达到对cursor排序的目的.比如数组A0里有 4(0),3(1),1(2),2(3),括号内为位置,排序后 ...
- UML类图几种关系的总结(转载 http://blog.csdn.net/tianhai110/article/details/6339565 )
http://blog.csdn.net/tianhai110/article/details/6339565
随机推荐
- [Xcode 实际操作]七、文件与数据-(4 )遍历文件夹中的文件
目录:[Swift]Xcode实际操作 本文将演示如何遍历文件夹下的内容. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class V ...
- jsf+ejb
jsf+ejb 示例 http://docs.jboss.org/jbossas/docs/Installation_And_Getting_Started_Guide/5/html/Sample_J ...
- linux网页资料链接
http://lab.xmirror.cn/ 玄镜官网 https://blog.csdn.net/zxgmdzz/article/details/79207944 Navicat Pre ...
- 3.过滤数据 ---SQL
一.使用WHERE子句 SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49; 输出▼ prod_name prod_p ...
- devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务
使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...
- win10红警黑屏和无法打开的处理
原因:win10或者win7无法打红警的原因,除开软件本身坏了等情况,多半是因为显示比率不对不上和系统不兼容导致的处理方法是: 1.将快捷方式发送到桌面(只是为了方便打开,当然你也可以不发送到桌面,关 ...
- [摘录]全面学习GFW
转载自:https://cokebar.info/archives/253 GFW会是一个长期的存在.要学会与之共存,必须先了解GFW是什么.做为局外人,学习GFW有六个角度.渐进的来看分别是: 首先 ...
- Code First 2
在codefirst一中也说了Mapping是实体与数据库的纽带,model通过Mapping映射到数据库,我们可以从数据库的角度来分析?首先是映射到数据库,这个是必须的.数据库里面一般包括表.列.约 ...
- MVC 知识点总结
[此篇文章收录于其他博客,作为笔记使用] 一· MVC MVC设计模式->MVC框架(前端开发框架),asp.net(webform) aspx M:Model (模型,负责业务逻辑处理,比如 ...
- Docker的下载安装以及简单使用
Docker的简介 Docker是一个基于GO语言开发的应用容器,它是一款适合运维人员和后段开发人员学习的开源容器引擎.Docker容器可以让开发的应用或者依赖包存储其中,可以运行在任何的Linux ...