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

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. PHP中array_merge和array+array的区别

    在PHP中可以使用array_merge函数和两个数组相加array+array的方式进行数组合并,但两者效果并不相同,区别如下: 当下标为数值时,array_merge()不会覆盖掉原来的值,但ar ...

  2. [js]js中事件的3要素

    js中事件的3要素 事件源 事件 事件处理程序 <!DOCTYPE html> <html> <head lang="en"> <meta ...

  3. python list的函数

    1. list.append(obj) 在列表末尾添加新的对象 2. list.count(obj) 统计某个元素在列表中出现的次数 3. list.extend(seq) 在列表末尾一次性追加另一个 ...

  4. python数据结构-如何快速找到多个字典中的公共键

    如何快速找到多个字典中的公共键 问题举例 统计每轮都进球的球员: 第1轮{‘tom’:1, 'meixi':2} 第2轮{‘coco’:3, 'meixi':4, 'marton':2} 第3轮{'c ...

  5. IIS相关

    使用aspnet_regiis.exe重新注册.NET Framework 重新安装IIS以后,需要用aspnet_regiis.exe来注册.NET Framework, 如下: C:\WINDOW ...

  6. 台式电脑、笔记本快捷选择启动项Boot 快捷键大全

    我们在安装系统时,会去设置电脑是从硬盘启动.U盘启动.光驱启动.网卡启动. 一般设置的方法有两种:一种是进BIOS主板菜单设置启动项顺序:另一种就是我在这里要介绍的快捷选择启动项. 以下是网友整理的各 ...

  7. idea快捷键使用

    idea                                 eclipse project                           workspace module     ...

  8. Node + Redis 实现分布式Session方案(转载)

    Session是什么? Session 是面向连接的状态信息,是对 Http 无状态协议的补充. Session 怎么工作? Session 数据保留在服务端,而为了标识具体 Session 信息指向 ...

  9. Python数据分析Numpy库方法简介(二)

    数据分析图片保存:vg 1.保存图片:plt.savefig(path) 2.图片格式:jpg,png,svg(建议使用,不失真) 3.数据存储格式: excle,csv csv介绍 csv就是用逗号 ...

  10. 复习-css边框和背景属性

    css边框和背景属性 border:所有边框属性 border-width:四条边框的宽度 border-style:设置边框样式,主要有dotted.solid.double border-colo ...