博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡排序
阅读量:4510 次
发布时间:2019-06-08

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

无论是迷宫游戏、扫雷游戏,还是常用的搜索引擎,甚至高端AI人机博弈等都需要算法来更好的实现。

算法是软件方面提升计算机效率的利器。

算法与数据结构分不开,用代码实现算法,至少会涉及到一种数据结构,数据结构通常有:

线性结构

树形结构
算法就要分别对应不同数据结构去排序。

当一个算法思想提出后,往往还需要更多时间去思考这个算法的优化。不断挖掘算法的潜力。

算法分类:

分治算法:归并排序、快速排序

贪心算法:最小生成树
动态规划:最短路径
递归搜索:树形结构
学习算法先从时间复杂度为O(n^2)学起,因为他们实现最简单,在并不复杂时,简单易用。高效率的算法往往实现也更复杂。

那就首先从算法从八大基本排序算的 冒泡排序法学起吧。

本文以升序排序为例。

冒泡排序定义及实现

冒泡排序,类似生活中于水中往上冒的气泡,越往上的气泡越大,故此得名。在冒泡排序中,每次比较前后两个数据,如果前一个比后一个大,则他们交换位置,这样从头到尾执行一次,则最大的数,就会被交换到最后一个位置,因为它比其他数都要打。进行第二轮排序,则次大的数会被交互到倒数第二位,以此类推。

首先来看一个基础的冒泡排序java代码实现:

 

 

 

 

 

从这里可以看到,因为有两次for循环每个循环最大会进行n次,所以时间复杂度为O(n^2).

优化一

优化1:在全部数据中,一旦前面有一个数比后面的大,就一定会发生交换,把大的数换到后面去。 所以我们可以加一个标记,如果某一趟排序没任何交换,则说明整组数据已经全部有序了,此时就可以中断循环,不用再比较,实现如下:

 

优化二
如前面定义中讲到,第一次循环会把最大的值交换到最后一个位置,第二次循环会把次大的值交换到倒数第二位,以此类推。随着循环的进行,靠后的部分都变为有序的区域,那么,靠后部分我们不必在进行比较:

 

优化三
上面的循环中,每次对整个数据循环我们都只找出了最大值,并且放到了最后的位置,如果我们每次循环既寻找最大值又最小值,并把最大值放到最后,最小值放到最前的位置,就可以进一步优化了,代码实现如下:

附上自动生成测试数组的代码

转载于:https://www.cnblogs.com/life-Meer/p/11330901.html

你可能感兴趣的文章
【资料整理】一些英语面试题整理
查看>>
Android真机调试的时候logcat中无法输出调试信息的解决办法
查看>>
这个七夕,送你一份程序员教科书级别的告白指南
查看>>
如何优雅的写一篇安利文-以Sugar ORM为例
查看>>
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
HTML5 Drag & Drop
查看>>
关于git
查看>>
来自java文档 File类
查看>>
.net下使用最小堆实现TopN算法
查看>>
最强日期正则表达式
查看>>
get与post区别
查看>>
mysql中级操作
查看>>
python类之魔法方法
查看>>
International Conference for Smart Health 2015 Call for Papers
查看>>
面向对象编程的介绍:三大特征:封装性, 继承, 多态.
查看>>
netty是什么?
查看>>
微信小店二次开发功能套餐列表
查看>>
ubuntu常见错误--Could not get lock /var/lib/dpkg/lock解决
查看>>
Java中BIO,NIO,AIO的理解
查看>>
浅谈Sql各种join的用法
查看>>