数据结构算法之冒泡排序——Java语言实现
今天来谈下冒泡排序算法,这次实现由两种形式如下所示:
1.对于长度为N的数据序列,没有加标签限制,针对一开始就是有序的数据序列,仍然需要排序N-1趟来完成排序。
2.对于长度为N的数据序列,加标了签限制,针对一开始就是有序的数据序列,仍然需要排序1趟就可以完成排序。
冒泡排序的过程可以简述如下:
* 冒泡排序:
* 相邻的2个数据进行排序对比,每次排序完一遍后,把最大的一个放到最后,
* 每次排序完一趟后,会选出最大的一个放到最后,最后一个不需要对比,直接放到第一位即可。
* 故,对n个数据进行冒泡排序,对比排序n-1趟即可完成。
实例说明如下所示:
列举数组实例:a[] = {23,34,56,78,65,90,88,92,18,21};
最后一个数据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语言实现的更多相关文章
- 算法之冒泡排序(Java语言)
冒泡排序(英语:Bubble Sort) 是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说 ...
- 排序算法之冒泡排序Java实现
排序算法之冒泡排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb 选择排序:http://t.cn/hros6e 插入排序:ht ...
- 数据结构之二分查找——Java语言实现
场景描述:给出一个数据序列长度为N,然后查找 一个数是否在数据序列中,若是,则返回在序列中的第几个位置. 首先可能第一个想到的就是按照顺序,从前到后一个一个进行查找,直到找到为止,若最后都没有,则说明 ...
- 算法之杨辉三角形(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 ...
- 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)
主要参考资料:数据结构(C语言版)严蔚敏 ,http://blog.chinaunix.net/uid-25324849-id-2182922.html 代码测试通过. package 图的建 ...
- 插曲一--记《数据结构与问题求解(Java语言版)(第4版)》翻译问题
在该书的527页中18.6理论题中,书中这样写道"完全结点是指每个结点都有两个孩子.证明,完全二叉树的结点数加1等于叶子树." 初看此题目,本人觉得很纳闷,再细细想之,发现似乎是个 ...
- 冒泡排序java语言实现
class bubbleSort { public static void main(String[] args){ int[] a={49,38,65,97,76,13,27,49,78,34,12 ...
- 数据结构算法与应用c++语言描述 原书第二版 答案(更新中
目录 第一章 C++回顾 函数与参数 1.交换两个整数的不正确代码. 异常 10.抛出并捕捉整型异常. 第一章 C++回顾 函数与参数 1.交换两个整数的不正确代码. //test_1 void sw ...
- 深度实战玩转算法, Java语言7个经典应用诠释算法精髓
深度实战玩转算法,以Java语言主讲,通过7款经典好玩游戏,真正将算法用于实际开发,由算法大牛ACM亚洲区奖牌获得者liuyubobobo主讲,看得见的算法,带领你进入一个不一样的算法世界,本套课程共 ...
随机推荐
- gzframework demo搭建
感谢框架作者,这里给出他的博客 http://www.cnblogs.com/GarsonZhang/ 背景:由于作者对代码的持续开发,导致了以前博客中的下载地址和构建方法和目前的项目不对应,这里给出 ...
- 最新的vue没有dev-server.js文件,如何进行后台数据模拟?
https://blog.csdn.net/qq_34645412/article/details/78833860 https://blog.csdn.net/qq_34645412/article ...
- 大牛推荐的30本经典编程书籍,从Python到前端全系列。
注:为了方便阅读与收藏,我们也制作了30本书籍完整清单的Markdown.PDF版以及思维导图版,大家可以在实验楼公众号后台回复关键字"书籍推荐"获取. Python 系列(10本 ...
- C# 准确获取系统 CPU 使用率
1. PerformanceCounter 注意:(32位下不是线程安全的) public class ProcessorUsage { const float sampleFrequencyMil ...
- Olap学习笔记
数据仓库建设--OLAP和数据立方体概念 http://student-lp.iteye.com/blog/2263154 OLAP(On-LineAnalysis Processing)在线分析处理 ...
- DRF之认证组件源码解析
认证组件 认证的几种方法:cookie,session,token几种.但是session会使服务器的压力增大,所以我们经常使用的是token.获取唯一的随机字符串: 登陆携带token值的处理: ...
- photoshop cc 安装失败 2%
photoshop cc 安装失败 2% C盘--Program Files---Common Files--Adobe--caps ,把这个文件夹中的文件全部删除,然后再安装 C:\Pr ...
- 利用“Java同包同名类执行顺序”取消Java 网站应用程序Licence验证
如果是在tomcat里运行,lib目录下一大堆的JAR包,不同的JAR包里可能会有相同的包名类名,JRE按照JAR名字的字母顺序加载JAR文件,同名类如果已加载,则后面的同名类会忽略. 公司购买的一款 ...
- GitHub linux 提交文件及403错误处理
$git clone "Clone with HTTPS(自己生成的地址,如:https://github.com/******(用户名)/test.git)" 这时在你git ...
- 一个关于cookie的坑
#问题:今天上午踩了一个坑,首先,这个小案例的运行结果是应该是在前端页面出现一个当前时间的,当然如果是首次登陆的话应该是显示"第一次登陆",第二次则会显示上次的登录时间,但是却没有 ...