- 浏览: 39880 次
- 性别:
- 来自: 北京
文章分类
最新评论
冒泡排序法
冒泡排序法其实就是交换排序的一种,即两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第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 687JSON 的真正价值 正如在上一篇文章 中所描 ... -
JSON入门一
2010-10-25 13:27 744在异步应用程序中发送和接收信息时,可以选择以纯文本和 X ... -
a href="#" 与 a href="javascript:void(0)" 的区别(转)
2010-10-25 13:25 812a href="#" 与 a h ... -
浅谈java中的选择排序法
2010-10-25 13:12 1449选择排序法 选择 ... -
C语言中的二分查找(折半查找)
2010-10-25 13:11 2911为了提高查找效率,在一个数组中查找某个数据是否存在时,可 ... -
约瑟夫环2
2010-10-25 13:06 210方法二:用面向对象的思想来解决问题 在同一个包里新建 ... -
约瑟夫环
2010-10-25 13:03 1103著名的约瑟夫环问题详解 问题概述: 已知n个人( ... -
Java中实现对象比较的几个相关概念
2010-10-25 12:54 819在Java中实现对象比较的几个相关概念(转) 一、跟对象 ...
相关推荐
冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python...
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复...
### Java冒泡排序算法知识点详解 #### 一、冒泡排序基本...总结而言,冒泡排序虽然不是最高效的排序算法,但它简洁明了的逻辑使其成为学习和教学中的经典案例。对于小规模的数据集,冒泡排序仍然有一定的实用价值。
在Java中实现冒泡排序的步骤: 1. 创建一个整型数组,用于存储待排序的元素。 2. 设置两个循环,外层循环控制遍历的轮数,内层循环控制每一轮中元素的比较与交换。 3. 在内层循环中,比较相邻两个元素的大小,如果前...
用 Java 实现冒泡排序算法 冒泡排序是一种简单的排序算法,它的基本思想是通过反复比较和交换相邻元素的位置来实现排序。下面是用 Java 实现冒泡排序算法的详细解释: 1. 排序方法 冒泡排序的排序方法是将被排序...
### 知识点一:字符串排序算法在 Java 中的应用 #### 冒泡排序算法实现 冒泡排序是一种简单的排序算法,通过重复遍历要排序的列表,比较每对相邻的元素,并交换它们的位置(如果顺序错误的话),直到没有任何一对...
* 冒泡排序: * 每次在无序队列里将相邻两个数一次进行比较, * 将小数调到前面,逐次比较,直至将最大的数移到 * 最后。将剩下的N-1个数继续比较,将次大数移至 * 倒数第二位。
在Java中实现冒泡排序,我们需要定义一个方法,通常是一个公共的静态方法,因为排序不涉及对象的状态,只涉及数组或列表的元素顺序。下面是一个简单的Java冒泡排序实现: ```java public class BubbleSort { ...
1.冒泡排序的原理:每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小) 2.通过画图分析,5个数字排4趟,n数字排n-1趟,而外层的for循环代表的是循环的趟数,所以外层循环的结束条件是...
在Java中,我们通常使用`for`循环来实现冒泡排序。下面是一个简单的Java代码示例,用于对一个整型数组进行升序排序: ```java public class BubbleSort { public static void bubbleSort(int[] arr) { int n = ...
### JAVA冒泡排序算法详解 冒泡排序是一种简单的排序算法,它重复地遍历要排序的元素列表,比较每对相邻元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复进行的,直到没有再需要交换的元素,也就是...
冒泡排序是一种基础且经典的排序算法,主要应用于计算机科学领域,特别是在编程语言如Java中。它的名字来源于排序过程中较小的元素像气泡一样逐渐“浮”到数组或列表的顶端。这个PPT文档很可能是详细介绍了Java实现...
冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1),是一种原地排序算法。虽然它在最坏情况和平均情况下的效率都不高,但由于其实现简单,常被用于教学和理解排序算法的基本原理。 冒泡排序的主要步骤包括: 1. 比较...
虽然冒泡排序在实际应用中的使用频率不高,尤其是在处理大规模数据集时,但由于其简单性和稳定性,在学习排序算法的基础概念方面具有不可替代的作用。此外,通过对冒泡排序的学习和实现,可以帮助初学者更好地理解...
在JAVA中,实现这两种排序算法可以使用面向对象的特性,创建一个类如`MaopaoKuaisu.java`,在这个类中定义两个方法,分别实现冒泡排序和快速排序。类的结构可能如下: ```java public class MaopaoKuaisu { public...
函数功能:对数组中的某一部分进行冒泡排序。 在上面的代码中,我们可以看到冒泡排序算法的C++函数模板的实现。这个函数模板可以适用于多种数据类型,如int、float、double等。 在 main 函数中,我们可以看到如何...
根据给定的信息,我们可以深入探讨冒泡排序算法及其在Java中的实现细节。冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复...
在Java中实现冒泡排序,主要涉及以下几个关键步骤: 1. **定义冒泡排序方法**: 首先,我们需要创建一个公共静态方法,接受一个整型数组作为参数。这个方法将执行冒泡排序的过程。 ```java public static void ...
### Java冒泡排序方法详解 #### 一、冒泡排序简介 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到...