今天来谈下冒泡排序算法,这次实现由两种形式如下所示:

1.对于长度为N的数据序列,没有加标签限制,针对一开始就是有序的数据序列,仍然需要排序N-1趟来完成排序。

2.对于长度为N的数据序列,加标了签限制,针对一开始就是有序的数据序列,仍然需要排序1趟就可以完成排序。

冒泡排序的过程可以简述如下:

* 冒泡排序:
  *  相邻的2个数据进行排序对比,每次排序完一遍后,把最大的一个放到最后,
  *  每次排序完一趟后,会选出最大的一个放到最后,最后一个不需要对比,直接放到第一位即可。
  *  故,对n个数据进行冒泡排序,对比排序n-1趟即可完成。

实例说明如下所示:

列举数组实例:a[] = {23,34,56,78,65,90,88,92,18,21};

第 1 次排序: 23   34   56   65   78   88   90   18   21   【92】
第 2 次排序 :23   34   56   65   78   88   18   21  【 90   92】
第 3 次排序: 23   34   56   65   78   18   21   【88   90   92】
第 4 次排序: 23   34   56   65   18   21   【78   88   90   92】
第 5 次排序: 23   34   56   18   21   【65   78   88   90   92】
第 6 次排序: 23   34   18   21   【56   65   78   88   90   92】
第 7 次排序: 23   18   21   【34   56   65   78   88   90   92】
第 8 次排序: 18   21  【 23   34   56   65   78   88   90   92】
第 9 次排序: 18  【 21   23   34   56   65   78   88   90   92】

最后一个数据18不需要进行比较,直接放到第一位即可。

至此,完成的冒泡排序的每趟排序细节如上所示。

算法的实现都是以java实现的,核心的算法是:

for(i=1;i<a.length;i++) {  //此处循环定义的是循环n-1趟,从第二个数据开始
   System.out.println();
    for(j=0;j<a.length-i;j++) { //此处循环是根据趟数减少的,每比较1此,确定一个数据,后面就会少比较一个数
    if(a[j]>a[j+1]) {
     temp=a[j+1];
     a[j+1]=a[j];
     a[j]=temp;
    }
   }
  }

为了结果实现更加清晰明了,会在程序中增加输出等语句,完整的java实现代码如下所示:‘

package com.three.thirdteen;

public class BubbleSortTest {

    public void SortTt(int a[]) {
int i,j;
int temp; //定义的用于交换数据的临时变量
for(i=1;i<a.length;i++) { //此处循环定义的是循环n-1趟,从第二个数据开始
System.out.println();
System.out.print("第 "+i+" 次排序结果:");
for(j=0;j<a.length-i;j++) { //此处循环是根据趟数减少的,每比较1此,确定一个数据,后面就会少比较一个数
if(a[j]>a[j+1]) {
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
show(a);
}
System.out.println();
} public void show(int a[]) {
for(int i=0;i<a.length;i++) {
System.out.print(" "+a[i]);
}
System.out.println();
} public static void main(String[] args) { int a[] = {23,34,56,78,65,90,88,92,18,21};
BubbleSortTest bt=new BubbleSortTest();
System.out.println("冒泡排序前的原始序列是:");
bt.show(a);
System.out.println("--------------排序开始---------------");
bt.SortTt(a);
System.out.println("--------------排序结束---------------");
System.out.println("排序结果是:");
bt.show(a);
}
}

上述程序的运行结果为:

-----------------------------------------------------

有标签的冒泡排序:

以上是针对没有添加标签的,若一开始就是有序的数据序列,添加标签后,就可以一趟结束后,得出排序好的结果,

主要是针对一开始就是有序或者少量无需的数据序列,可以减少排序的趟数。

对上面的程序稍作修改,修改后的程序代码如下所示(程序的运行结果不变,仅在原有的程序中添加一个change标签):

package com.three.thirdteen;

public class BubbleSortTest2 {

    /**
* 冒泡排序:
* 相邻的2个数据进行排序对比,每次排序完一遍后,把最大的一个放到最后,
* 每次排序完一趟后,会选出最大的一个放到最后,最后一个不需要对比,直接放到第一位即可。
* 故,对n个数据进行冒泡排序,对比排序n-1趟即可完成。
*
* 此程序的实现增加了标签功能,主要是针对一开始就是有序或者少量无需的数据序列,
* 可以减少排序的趟数。
*/ public void SortTt(int a[]) {
int i,j;
int temp; //定义的用于交换数据的临时变量
boolean change=false;
for(i=1;i<a.length;i++) { //此处循环定义的是循环n-1趟,从第二个数据开始
System.out.println();
change=false;
System.out.print("第 "+i+" 次排序结果:");
for(j=0;j<a.length-i;j++) { //此处循环是根据趟数减少的,每比较1此,确定一个数据,后面就会少比较一个数
if(a[j]>a[j+1]) {
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
change=true;
}
}
if(!change) break;
show(a);
}
System.out.println();
} public void show(int a[]) {
for(int i=0;i<a.length;i++) {
System.out.print(" "+a[i]);
}
System.out.println();
} public static void main(String[] args) { int a[] = {23,34,56,78,65,90,88,92,18,21};
BubbleSortTest2 bt=new BubbleSortTest2();
System.out.println("冒泡排序前的原始序列是:");
bt.show(a);
System.out.println("--------------排序开始---------------");
bt.SortTt(a);
System.out.println("--------------排序结束---------------");
System.out.println("排序结果是:");
bt.show(a);
}
}

数据结构算法之冒泡排序——Java语言实现的更多相关文章

  1. 算法之冒泡排序(Java语言)

    冒泡排序(英语:Bubble Sort) 是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说 ...

  2. 排序算法之冒泡排序Java实现

    排序算法之冒泡排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb  选择排序:http://t.cn/hros6e  插入排序:ht ...

  3. 数据结构之二分查找——Java语言实现

    场景描述:给出一个数据序列长度为N,然后查找 一个数是否在数据序列中,若是,则返回在序列中的第几个位置. 首先可能第一个想到的就是按照顺序,从前到后一个一个进行查找,直到找到为止,若最后都没有,则说明 ...

  4. 算法之杨辉三角形(Java语言)

    杨辉三角形, 又称贾宪三角形.帕斯卡三角形. 前9层写出来如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 ...

  5. 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)

    主要参考资料:数据结构(C语言版)严蔚敏   ,http://blog.chinaunix.net/uid-25324849-id-2182922.html   代码测试通过. package 图的建 ...

  6. 插曲一--记《数据结构与问题求解(Java语言版)(第4版)》翻译问题

    在该书的527页中18.6理论题中,书中这样写道"完全结点是指每个结点都有两个孩子.证明,完全二叉树的结点数加1等于叶子树." 初看此题目,本人觉得很纳闷,再细细想之,发现似乎是个 ...

  7. 冒泡排序java语言实现

    class bubbleSort { public static void main(String[] args){ int[] a={49,38,65,97,76,13,27,49,78,34,12 ...

  8. 数据结构算法与应用c++语言描述 原书第二版 答案(更新中

    目录 第一章 C++回顾 函数与参数 1.交换两个整数的不正确代码. 异常 10.抛出并捕捉整型异常. 第一章 C++回顾 函数与参数 1.交换两个整数的不正确代码. //test_1 void sw ...

  9. 深度实战玩转算法, Java语言7个经典应用诠释算法精髓

    深度实战玩转算法,以Java语言主讲,通过7款经典好玩游戏,真正将算法用于实际开发,由算法大牛ACM亚洲区奖牌获得者liuyubobobo主讲,看得见的算法,带领你进入一个不一样的算法世界,本套课程共 ...

随机推荐

  1. JavaScriptDom和应用

    DOM编程 DOM是Document Object Model文档对象模型 DOM是一种与浏览器,平台,语言无关的接口,使得你可以访问页面其他的标准组件 DOM简介 D:文档  –  html 文档 ...

  2. Deeplab v3+中的骨干模型resnet(加入atrous)的源码解析,以及普通resnet整个结构的构建过程

    加入带洞卷积的resnet结构的构建,以及普通resnet如何通过模块的组合来堆砌深层卷积网络. 第一段代码为deeplab v3+(pytorch版本)中的基本模型改进版resnet的构建过程, 第 ...

  3. linux----------linux下配置内网ip

    1./etc/sysconfig/network-scripts/ifcfg-eth1   创建这个文件里面的内容如下 TYPE="Ethernet" BOOTPROTO=&quo ...

  4. linux终端使用ss代理

    title: linux终端使用ss代理 date: 2017-11-09 21:06:16 tags: linux categories: linux 系统为archlinux 先将ss代理转化为h ...

  5. Mysql模糊查询like效率,以及更高效的写法

    在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来.这个时候查询的效率就 ...

  6. consul 集群

    主机运行 : consul agent -server -bootstrap-expect 2  -data-dir D:\consul  -node=winyh -bind=192.168.10.1 ...

  7. GO数组

    Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 数组定义: var 数组变量名 [元素数量]T ]int //定 ...

  8. jQuery图片无缝轮播

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. Linux 其它知识点

    1:import sys  ----导入路径     sys.path.append("/hom") ----添加一个hom的路径 2:重新导入模块 from imp import ...

  10. centos7.3配置python2、3环境与配置各自pip

    环境:CentOS-7-x86_64-Everything-1611 No.1 查看CentOS对Python的默认依赖 [root@cs ~]# ls /usr/bin/python* /usr/b ...