简单排序算法:冒泡法排序(Java)

简介:
+关注继续查看

冒泡排序口诀:两两比较,两两交换。

操作对象:乱序数组

操作方式:双循环以及内层循环中条件的判断

操作结果:升序或降序数组

    举例:

    给定一个数组:int[] arr = new int[]{99,33,21,14,65,11,9,45,22,10};

对此数组进行升序排列。

    分析:越大的数越要下沉,最大的数沉底;越小的数越要上浮,最小的数浮顶。上面数组中一共有10个数,实现这10个数的升序排列一共分两方面:

    第一方面:一轮一轮(或者说一趟一趟)地从左往右遍历数组,每一轮操作之后产生一个最大数放到数组最右侧,但不能超过上一轮的最大值。对于数组arr,第一轮操作后,99放在arr[9]第二轮操作后,65放在arr[8]第三轮操作后,45放在arr[7];……一共要操作九轮。数组中有10个数,要操作九轮。因为操作到第九轮的时候,产生第九个最大数,那第九个最大数应该放在arr[1]的位置,第十个最大数即最小数已经没有与之比较的对象因此对于十个数的升序排列是操作九轮。那么对于n个数的排列,推理一下当然是操作n-1轮。由此得出轮数与数组长度的关系:轮数==数组长度-1。那么中间还有一个问题:在每一轮的操作中,大数如何一步步地沉底呢?在每一轮操作中,一共需要比较多少次呢?每轮比较的次数与轮数是什么样的关系?请看第二方面的说明:

    第二方面:                      

           开始                    {99,33,21,14,65,11,9,45,22,10}  比较次数:0

            第一轮:99>33?  true  {33,99,21,14,65,11,9,45,22,10}  比较次数:1

                    99>21?  true  {33,21,99,14,65,11,9,45,22,10}  比较次数:2

                    99>14?  true  {33,21,14,99,65,11,9,45,22,10}  比较次数:3

                    99>65?  true  {33,21,14,65,99,11,9,45,22,10}  比较次数:4

                    99>11?  true  {33,21,14,65,11,99,9,45,22,10}  比较次数:5

                    99>9?   true  {33,21,14,65,11,9,99,45,22,10}  比较次数:6

                    99>45?  true  {33,21,14,65,11,9,45,99,22,10}  比较次数:7

                    99>22?  true  {33,21,14,65,11,9,45,22,99,10}  比较次数:8

                    99>10?  true  {33,21,14,65,11,9,45,22,10,99}  比较次数:9

           第二轮: 33>21?  true  {21,33,14,65,11,9,45,22,10,99}

                    33>14?  true  {21,14,33,65,11,9,45,22,10,99}

                    33>65?  false {21,14,33,65,11,9,45,22,10,99}

                    ...

                    ...

                    ...


                    33>65?  false {21,14,33,11,9,45,22,10,65,99}  比较次数:8

           第三轮:比较次数:7

           第四轮:比较次数:6

           ...

           第九轮:比较次数:1

           

           于是得出如下关系:该轮次数 = 数组长度-该轮轮数

         又根据第一方面推理:总轮数 = 数组长度-1

            注意到结合数组下标从arr[0]开始的原理,设计出的双循环如下:

1
2
3
4
5
6
7
8
9
           for(int i=0; i<arr.length-1; i++){  //外循环控制轮数
               for(int j=0; j<arr.length-i-1;j++){   //内循环控制该轮次数
                   if(arr[j]>arr[j+1]){      //两两比较
                       int temp = arr[j];    //1
                       arr[j] = arr[j+1];    //2
                       arr[j+1] = temp;      //3         1、2、3代码实现两两交换
                   }
               }
           }




本文转自yeleven 51CTO博客,原文链接:http://blog.51cto.com/11317783/1754127


                           

相关文章
|
2月前
|
存储 搜索推荐 算法
Java数据结构第一讲-排序算法(下)
Java数据结构第一讲-排序算法(下)
|
2月前
|
存储 数据采集 算法
Java数据结构第一讲-排序算法(上)
Java数据结构第一讲-排序算法(上)
|
3月前
|
存储 算法 搜索推荐
从零开始学习 Java:简单易懂的入门指南之查找算法及排序算法(二十)
从零开始学习 Java:简单易懂的入门指南之查找算法及排序算法(二十)
|
4月前
|
机器学习/深度学习 搜索推荐 算法
面试时常常考察的java排序算法--选择排序、冒泡排序、插入排序
面试时常常考察的java排序算法--选择排序、冒泡排序、插入排序
|
4月前
|
存储 搜索推荐 算法
2.2 Java一维数组操作技巧:数组的排序算法及性能分析
2.2 Java一维数组操作技巧:数组的排序算法及性能分析
51 0
|
5月前
|
搜索推荐 Java 程序员
java排序算法精讲
java排序算法精讲
125 0
java排序算法精讲
|
5月前
|
搜索推荐 Java
Java List排序算法:常用排序算法及实现原理
在Java编程中,排序算法是十分重要的一环。根据不同的情况,我们需要使用不同的排序算法。在本文中,我们将介绍常用的Java List排序算法及其实现原理。
51 0
|
5月前
|
搜索推荐 Java
java排序算法
当涉及排序算法时,Java中常见的五种排序算法包括冒泡排序、选择排序、插入排序、归并排序和快速排序
41 0
|
6月前
|
搜索推荐 算法 Java
Java中的六种经典比较排序算法:代码实现全解析(下)
Java中的六种经典比较排序算法:代码实现全解析(下)
34 0
|
6月前
|
搜索推荐 算法 Java
Java中的六种经典比较排序算法:代码实现全解析(上)
Java中的六种经典比较排序算法:代码实现全解析
75 0
相关产品
机器翻译
推荐文章
更多