Java排序一,冒泡排序!

刚刚开始学习Java,但是比较有兴趣研究算法。最近看了一本算法笔记,刚开始只是打算随便看看,但是发现这本书非常不错,尤其是对排序算法,以及哈希函数的一些解释,让我非常的感兴趣,就记录一下自己的学习总结!

排序:将一些无序的元素按照某种规则排列的过程就叫“排序”。在生活中,有时候可能是一些少量的数据 ,,,但是 ,也有可能是 一些的大数据 。排序是非常基础和重要的算法,有着广泛的理论基础和实践需求。(加粗部分摘自《算法笔记》原话!:-D)

一个排序算法,有3个方面去衡量优劣:

1,时间复杂度

2,空间复杂度

3,稳定性

一:冒泡排序

冒泡排序是我们大多数同学接触的第一个排序算法,它虽然在时间上不占优势,但是代码十分简洁,逻辑很清晰,实现难度低!

基本思想:首先将第一个元素(下标为0)和第二个元素(下标为1)进行比较,若为逆序,则将两个元素进行一次交换,然后比较第二个元素和第三个元素。依次类推,直至第n-1个元素和第n个元素进行过比较为止。上述过程称为第一趟冒泡排序,其结果使得最大的那个元素被放到最后一个位置上(沉下去了)。然后进行第二趟冒泡排序,对前n-1个元素进行同样操作,其结果是使元素次大的被放到第n-1个位置上。意思就是,第i趟冒泡排序是从1个元素到第n-i+1个元素依次比较进行比较(也就是下标为0的元素到下标为ary.length-i,写作表达式即为for(int i=0;i<ary.length-i-1;i++)),并在“逆序”时交换相邻记录,最终达到将大的值沉下去,小的值冒上来!

比如:定义一个整型数组   int  [] int intarray=new int []{5,66,8,9,100,0,225,1};

分析过程:

Java实现代码如下:

到此,Java中的冒泡排序算写完了,还有老师留下一个问题就是冒泡排序外层循环M次,内层循环N次,则共比较的多少次(不包括交换)?

我的观点是:假设总共有8个元素,则M=8;则N=7,6,5,4,3,2。倒数第二趟的时候比较两次就可以完全确定顺序了!所有答案就是,以2为首元素的等差数列,所有就总共有

{(2+M-1)*(N-1)}/2次的比较。

学习Java 以及对几大基本排序算法(对算法笔记书的研究)的一些学习总结(Java对算法的实现持续更新中)的更多相关文章

  1. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  2. 痞子衡嵌入式:史上最强i.MX RT学习资源汇总(持续更新中...)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MX RT学习资源. 类别 资源 简介 官方汇总 i.MXRT产品主页 恩智浦官方i.MXRT产品主页,最权威的资料都在这里,参考手 ...

  3. 常见算法合集[java源码+持续更新中...]

    一.引子 本文搜集从各种资源上搜集高频面试算法,慢慢填充...每个算法都亲测可运行,原理有注释.Talk is cheap,show me the code! 走你~ 二.常见算法 2.1 判断单向链 ...

  4. java 学习必备的软件,持续更新中

    小编会持续更新在学习Java过程中需要的软件以及各种文件: 话不多说,看行动! 一:JDK (1)JDK1.8(*64): 链接:https://pan.baidu.com/s/1vM0jNXn2CT ...

  5. [Hadoop] Hadoop学习历程 [持续更新中…]

    1. Hadoop FS Shell Hadoop之所以可以实现分布式计算,主要的原因之一是因为其背后的分布式文件系统(HDFS).所以,对于Hadoop的文件操作需要有一套全新的shell指令来完成 ...

  6. Kotlin教程——史上最全面、最详细的学习教程,持续更新中....

    关于这个系列教程,我是从最基础的开发环境搭建到项目进阶到后面的项目开发这个过程来写的.我一直秉承从实际项目开发以及源码解析的角度去写好这个教程,并让从未接触过编程的朋友能学好kotlin这门语言.所以 ...

  7. Java的一些良好习惯及细节------持续更新中...

    1.在做条件判断时,不要将变量放在判断符的左边,这样做可以防止出现空指针异常,以字符串比较为例: String name = "Tom"; //这种方式不推荐,如果变量name为空 ...

  8. Linux 系统化学习系列文章总目录(持续更新中)

    本页内容都是本人系统化学习Linux 时整理出来的.这些文章中,绝大多数命令类内容都是翻译.整理man或info文档总结出来的,所以相对都比较完整. 本人的写作方式.风格也可能会让朋友一看就恶心到直接 ...

  9. 【java学习】实践中总结--持续更新中

    目录: 一些定义 配置环境 相关语法 1.一些定义 java中DO的含义: https://blog.csdn.net/canot/article/details/51698047 DAO 中包含了各 ...

随机推荐

  1. iOS 界面布局,设置约束

    1. 设置控件的宽度是父视图的宽度的1/2 在控件上按住ctrl,按住鼠标左键,拖动到父视图,这时出来一个选项,选中aspect 在Multiplier中填上1:2 即可,其它的比例也是这样 2. 设 ...

  2. SQL四种语言

    1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...

  3. 直播流怎么存储在Ceph对象存储上? Linux内存文件系统tmpfs(/dev/shm) 的应用

    一./dev/shm理论 默认的Linux发行版中的内核配置都会开启tmpfs,映射到了/dev/下的shm目录.可以通过df 命令查看结果./dev/shm/是linux下一个非常有用的目录,因为这 ...

  4. osgEarth编译(转载)

    osgEarth编译 osgEarth的编译需要osg和一些第三方插件库,我主要参考了cnblogs上的一篇博文,但是也不够详细,并且我是在已经编译好osg的情况下去编译osgEarth,所以期间也遇 ...

  5. Eclipse和debug的一些快捷键

    F5单步调试进入函数内部.  F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的.  F7由函数内部返回到调用处.  F8一直执行到下一个断点.  F11 这个好 ...

  6. 一个简单版的波纹css3动画

    ul{width: 300px;border: red;}ul li{width: 300px;height: 70px;line-height: 70px;background: #fff;text ...

  7. Android测试点

    记录下之前项目测试中涉及到的Android测试点: 1.APP基本功能 按照back log整理测试用例,测试中发现有需求变动.或未考虑完全,及时更新测试用例. 测试用例包括:全功能点用例+重点功能快 ...

  8. 第五组UI组件:ProgressBar及其子类

    ProgressBar组件也是一组重要的组件,ProgressBar本身代表了进度条组件,它还派生了两个常用的组件:SeekBar和RatingBar.ProgressBar及其子类在用上十分相似,只 ...

  9. ASP.NET MVC中使用异步控制器

    线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个 ...

  10. Flex4 布局 元素index

    Flex4 布局 元素index <?xml version="1.0" encoding="utf-8"?> <s:Application ...