数组的冒泡排序

首先咱们要理解排序的定义:数组

冒泡排序(Bubble sort):相邻的两个数逐个的作比较,若是前一个数比后一个数小那么就交换过来,当第一轮比较完毕以后最小的值必定在末尾优化

咱们能够先画出以一张图:
spa

数组两个相邻的值去比较后面的数大于前面的数就会去交换,所以每轮比较后最小值都会出如今此次比较的最后一位3d

第二次比较:blog

第三次比较:
排序

第四次比较:
索引

 

好了,上面就是咱们模拟计算机去比较一个数组;既然咱们知道了如何去比较数组for循环

那么咱们该如何去编写代码,让计算机会自动去比较呢?循环

这就要发挥咱们本身的创造能力以及独特的思惟,言归正传,咱们到底该如何写出这个冒泡排序呢?遍历

接下来就由我就来简单的演示一下吧!

例子1:

 

这个就是最简单的交换方法

咱们看到这个方法:

Q:第一个for循环为何从1开始,以及为何是这个循环条件?

A:从1开始是由于外层循环表明的是比较轮数,不可能有第0轮这个东西把

    循环条件是由上面的表格观察而出来的,比较轮数是小于这个数组的长度的

Q:第二个for循环从为何从0开始,以及这个循环条件

A:由于第二个循环表明的是每一轮比较的次数,从0开始是也表明要交换的索引

     既然咱们知道了这个循环表明的是比较次数,从上面的表格中能够得出这么一个结论

    交换次数  = 数组长度 - 当前轮数

   由于是从0开始的因此就要小于这个值,这就是咱们的循环条件

最后if中的就好理解了加入后一个索引的数大于当前索引数,就去交换这两个数。

 

 

 例子2:

利用求极值的思路去作冒泡排序

 这是第一次写出的结果:

其实咱们发现这个数组其实在第5行的时候就交换好了

但是程序并不会所以停下来,而后继续交换从而获得了意外的结果

那么怎么来判断这个数组是否已经排好序了,从而去中止整个循环

没错,就是而后判断数组是否从大到小排好序了呢?

这里我使用了一个方法:

 

咱们来看到这个方法:

 

咱们默认这个数组是循序排序的,因此结果为true

而后开始循环:

假若有前面索引的数小于后面索引数,就说明这个数组不是降序排列的

就把结果改成false,而且跳出循环

这就是咱们判断数组是否降序排列的一个方法,

若是判断是否为升序排列的话,只需把if中的小于号换成大于号还便可

 利用这个方法得出的结果是这样子的:

这就是咱们所指望的结果。

接下来就是给出整个代码:

 

这里要说明一下:

ArrayDemo.printArray方法其实就是一个遍历数组的方法

为了节省时间就直接调用过来了

 

咱们也能够把上面的冒泡排序优化一下,和例子2也是同样的思路

如图:

 

 

最后在看一下这两种方法的耗时:

 

差很少就是这样子了

相关文章
相关标签/搜索