- 浏览: 38027 次
- 性别:
- 来自: 北京
文章分类
最新评论
冒泡排序法
冒泡排序法其实就是交换排序的一种,即两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,直至最终完成排序。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。(如附件图1)
冒泡排序的基本思想:
将被排序的记录数组 R[1..n] 假定为垂直排列,每个记录 R[i] 看做是重量为 R[i].key 的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组 R 。凡扫描到违反本原则的轻气泡,就使其向上“漂浮”。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
(1) 初始, R[1..n] 为无序区。
(2) 第一趟扫描,从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较 (R[n],R[n-1]) 、 (R[n-1],R[n-2]) 、 … 、 (R[2],R[1]); 对于每对气泡 (R[j+1],R[j]), 若 R[j+1].key<R[j].key, 则交换 R[j+1] 和 R[j] 的内容。
第一趟扫描完毕时,“最轻”的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置 R[1] 上。
(3) 第二趟扫描,扫描 R[2..n]。扫描完毕时,“次轻”的气泡飘浮到 R[2] 的位置上 …… 最后,经过 n-1 趟扫描可得到有序区 R[1..n]。
注意:第 i 趟扫描时, R[1..i-1] 和 R[i..n] 分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡漂浮到顶部位置 R[i] 上,结果是 R[1..i] 变为新的有序区。 (如附件图2)
因为每一趟排序都使有序区增加了一个气泡,在经过 n-1 趟排序之后,有序区中就有 n-1 个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行 n-1 趟排序。
若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。为此,在下面给出的算法中,引入一个交换标志exchange, 在每趟排序开始前,先将其置为0。若排序过程中发生了交换,则将其置为1。各趟排序结束时检查 exchange, 若未曾发生过交换则终止算法,不再进行下趟排序。
package com.itttop.sort;
public class BubbleSort {
public static void main(String[] args) {
int[] R = new int[11];// R(1..10) 是待排序的文件,采用自下向上扫描,对R 做冒泡排序
int i, j;
System.out.println("排序前的数列为:\n");
for (i = 1; i < R.length; i++) {
R[i] = (int) (Math.random() * 100);
System.out.print(R[i] + "\t");
}
int exchange; // 交换标志
for (i = 1; i < R.length; i++) // 最多做11-1=10 趟排序
{
exchange = 0;// 本趟排序开始前,交换标志为0
for (j = 9; j >= i; j--)
{
// 对当前无序区R[i..10] 自下向上扫描
if (R[j + 1] < R[j])// 交换记录
{
R[0] = R[j + 1]; // R[0] 用于交换,仅做暂存单元
R[j + 1] = R[j];
R[j] = R[0];
exchange = 1; // 发生了交换,故将交换标志置1
}
}
if (exchange == 0)// 本趟排序未发生交换,提前终止算法
{
break;
}
}
System.out.println("\n" + "排序后的数列为:\n");
for (int k = 1; k < R.length; k++) {
System.out.print(R[k] + "\t");
}
}
}
测试效果如下:
排序前的数列为:
16 67 19 83 40 29 92 26 19 64
排序后的数列为:
16 19 19 26 29 40 64 67 83 92
发表评论
-
String中的小问题2
2010-10-25 14:24 68//题目;收集顾客反馈意见信息(用户输入的自己姓名、联系方 ... -
斐波那契数列
2010-10-25 14:23 160/**题目:斐波那契数列 * 求fibonacci数列 ... -
String中的小问题
2010-10-25 14:22 90/**题目1: * 给定一个字符串"Aaaa ... -
四种操作xml的方式: SAX, DOM, JDOM , DOM4J的比较
2010-10-25 13:43 57四种操作xml的方式: SAX, DOM, JDOM ... -
用Dom4j解析XML及中文问题
2010-10-25 13:42 301用Dom4j解析XML及中文问题(转载) ... -
Dom4j的使用(转至CSDN)
2010-10-25 13:32 74Dom4j 使用简介 DOM4J ... -
JSON入门二
2010-10-25 13:29 646JSON 的真正价值 正如在上一篇文章 中所描 ... -
JSON入门一
2010-10-25 13:27 688在异步应用程序中发送和接收信息时,可以选择以纯文本和 X ... -
a href="#" 与 a href="javascript:void(0)" 的区别(转)
2010-10-25 13:25 767a href="#" 与 a h ... -
浅谈java中的选择排序法
2010-10-25 13:12 1397选择排序法 选择 ... -
C语言中的二分查找(折半查找)
2010-10-25 13:11 2870为了提高查找效率,在一个数组中查找某个数据是否存在时,可 ... -
约瑟夫环2
2010-10-25 13:06 210方法二:用面向对象的思想来解决问题 在同一个包里新建 ... -
约瑟夫环
2010-10-25 13:03 1059著名的约瑟夫环问题详解 问题概述: 已知n个人( ... -
Java中实现对象比较的几个相关概念
2010-10-25 12:54 776在Java中实现对象比较的几个相关概念(转) 一、跟对象 ...
相关推荐
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复...
* 冒泡排序: * 每次在无序队列里将相邻两个数一次进行比较, * 将小数调到前面,逐次比较,直至将最大的数移到 * 最后。将剩下的N-1个数继续比较,将次大数移至 * 倒数第二位。
用java实现冒泡排序算法,开发者必会的几种算法
java 冒泡排序法 PPT文档java 冒泡排序法 PPT文档java 冒泡排序法 PPT文档java 冒泡排序法 PPT文档
java冒泡排序集锦方法!所有的方法都有!很不错的!希望对大家有帮助哈哈!
可以用java来得到冒泡排序的实现,由屏幕输入存入数组。
1.冒泡排序的原理:每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小) 2.通过画图分析,5个数字排4趟,n数字排n-1趟,而外层的for循环代表的是循环的趟数,所以外层循环的结束条件是...
Java语言实现的冒泡排序算法,代码里头有详细注释,注释皆为简单英文,这个算法比较经典,欢迎新手下载学习使用,欢迎后期的学习交流!
java 冒泡排序法 java 冒泡排序法
从老师那弄的JAVA冒泡排序的一个讲解,不明白的可以好好看看哈
Java实现冒泡排序
JAVA冒泡排序和快速排序算法,符合实验报告要求哦
用java 编写的冒泡排序算法,并涵盖了冒泡排序算法的几种优化方式,以及在冒泡排序上的二分查找法。
Java利用冒泡排序法实现从小到大排序的功能。
冒泡排序算法详细分析那还等hi实地阿基hihi大UI一及对阿迪年hiue一群
冒泡排序法java。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
设计一个双向冒泡排序算法。要求用C/C++实现。
用java语言实现冒泡排序、插入排序、堆排序、快速排序、归并排序、希尔排序、桶排序,并且对各种排序算法进行性能的比较。
JAVA程序,冒泡排序法,给定一个数组存储一组数据,利用冒泡排序法将其排序