博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法总结[2]_冒泡、直接插入和希尔排序
阅读量:5083 次
发布时间:2019-06-13

本文共 1304 字,大约阅读时间需要 4 分钟。

排序算法总结[2]

标签(逗号分隔): 排序、算法、Java


一、冒泡排序

冒泡排序是最简单的排序算法了,基本思路是:相邻元素两两比较,每次得出一个最大(最小)的冒出即可

  • 时间复杂度:
    平均和最坏是:O(N^2)
    最好是:O(N)---算法需要改进,记录每次要不要交换即可
  • 空间复杂度:O(1)
  • 稳定性:稳定
  • 冒泡排序效率极其低下,在数据量很小的时候拿来玩玩还可以
void bubbleSort(int[] arr]){    if(arr==null)throw new NullPointerException();    if(arr.length<2)return;    boolean didSwap;    for(int i=arr.length-1;i>0;--i){        didSwap=false;        for(int j=0;j
arr[j+1]){ int tmp=arr[j]; arrr[j]=arr[j+1]; arr[j+1]=arr[j]; //避免函数调用以提高效率 didSwap=true; } } if(didSwap==false)return;//不需要再比较了 }}

二、插入排序

在数据量不大的时候可以使用插入排序,基本思路是:将数组看做已排序区域和未排序区域,每次从未排序区域取一个数据插入排序区域的正确位置即可。

  • 时间复杂度:
    最坏和平均:O(N^2)
    最好是:O(N),输入是排序的数据,每次只需和前一个元素比较即可
  • 空间复杂度:O(1)
  • 稳定性:稳定
  • 使用:在优化快排的一种策略中,就是选择在数据量较小(n<10)时使用插入排序来完成即可。**
void insertSort(int[] arr){    if(arr==null)throw new NullPointerException();    if(arr.length<=1)return;    for(int i=1;i
0 && arr[j-1]>tmp;--j){ arr[j]=arr[j-1]; //插入到前面正确的位置上 } arr[j]=tmp; }}

三、希尔排序

希尔排序又称为缩小增量排序,基本思路:选定一个由大到小的增量序列,每次以一个增量为基准使用直接插入排序。

根据选定的增量序列,时间复杂度可能会不同:
参考:《数据结构与算法分析_C语言描述》 P170 作者:Mark Allen Weiss

  • Hibbard序列的最坏时间复杂度是:O(N^(3/2))
  • Sedgwick提出了其他的序列,最坏可以达到O(N^(4/3))
    下面是一个参考代码:
    810660-20160919110208215-1838303142.jpg

转载于:https://www.cnblogs.com/lhyblog/p/5884365.html

你可能感兴趣的文章
关于退出当前页面在火狐的一些问题
查看>>
【项目实施】项目考核标准
查看>>
spring-aop AnnotationAwareAspectJAutoProxyCreator类
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>
[转]jsbsim基础概念
查看>>
DIV和SPAN的区别
查看>>
第一次使用cnblogs
查看>>
C#语法糖之 session操作类 asp.net
查看>>
2015 Multi-University Training Contest 3
查看>>
使用Gitblit 在windows 上部署你的Git Server
查看>>