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

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. 归并排序(Python实现)

    目录 1. 归并排序--while版本 2. 测试用例 3. 算法时间复杂度分析 1. 归并排序--while版本 def merge_sort_while(b_list): '''归并排序--whi ...

  2. linux delete file

    今天不小心生成了这么个文件名的文件-ep-ser 然后 rm -ep-ser就删除不了,它认为-e是option 后来,用rm ./-ep-ser就顺利删除了,哈哈,教训啊

  3. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

  4. linux----------centos6.4安装完了以后敲ifconfig,没有局域网ip。解决如下

    1.vim /etc/sysconfig/network-scripts/ifcfg-eth0 进入linux然后进入这个文件里面如下: DEVICE=eth0 HWADDR=00:0C:29:92: ...

  5. Ubuntu16.04彻底卸载MySQL

    删除mysql的数据文件 sudo rm /var/lib/mysql/ -R 删除mysql的配置文件 sudo rm /etc/mysql/ -R 自动卸载mysql(包括server和clien ...

  6. count列表中字符出现的次数

    如何count列表中字符出现的次数?可以将其生成一个字典.key是列表中的字符串,value是出现的次数 例如gen = [2, 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 8, 4, ...

  7. 关闭jtag保留swd

    串行线JTAG 配置 (Serial wire JTAG configuration)  位26:24  这些位只能由软件写( 读这些位,将返回未定义的数值) ,用于配置SWJ和跟踪复用功能的I/O ...

  8. android studio 中如何合并冲突(转)

    合并分支,解决冲突 执行Git merge ,如果有冲突,就会出现如下格式: <<<<<<< HEAD 这个位置的内容就是当前所在分支的内容 ======= ...

  9. mysql两条sql合并查询总数

    select IFNULL(c.nodeCount,0) + IFNULL(c.phyCount,0) as totalCount from ( select count(*) nodeCount, ...

  10. week_one-python格式化输出

    1.多行格式化输出 (1) # Author:larlly name = input("input your name :") age = input("input yo ...