首先明确下冒泡排序的思想
冒泡排序(BubbleSort)的基本概念是:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡序。
冒泡排序是稳定的。
若记录序列的初始状态为"正序",则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次比较,且不移动记录;反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动。因此冒泡排序总的时间复杂度为O(n*n)。
package math;
/**
* 思想是依次选中的最大的一位或最小的一位按顺序排放
*
* @author wxg1022
*
*/
public class 冒泡算法 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//int[] arr = new int[] { 25, 24, 23, 22, 21, 20, 19, 18 };
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
//int[] arr = new int[] { 67, 99, 23, 66, 21, 9, 40, 45 };
int temp = 0;
int count=0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
count++;
}
}
print.p(" "+count);
print.p(arr);
// 算法改进
count=0;
arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
//arr = new int[] { 25, 24, 23, 22, 21, 20, 19, 18 };
//arr = new int[] { 67, 99, 23, 66, 21, 9, 40, 45 };
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = true;
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag=false;
}
count++;
}
if(flag){
break;
}
}
print.p(" "+count);
print.p(arr);
// 算法改进
}
}
运行结果是:
28
1 2 3 4 5 6 7 8
7
1 2 3 4 5 6 7 8
分享到:
相关推荐
冒泡算法的改进思想: 1.记录从第0下标开始一直递增的最后一个数的下标start,在以后的每趟排序中都是从start下标开始比较,免去了从头到此下标的比较 2.记录从最后一个下标开始一直递减的最后一个下标end,在以后...
3进一步改进的冒泡排序,如果在某次冒泡过程中,最后一次进行交换的位置为flag,则表示flag之后的序列已经有序,那么下一次冒泡就无需比较flag之后的序列,即只要比较到flag就可以结束此次冒泡过程。当flag=0时,...
冒泡法排序c语言程序c冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法.txtc冒泡算法....
基于C语言的排序算法演示程序,包含了“冒泡算法”和“选择算法”两个基础的排序算法。学习程序设计,重点是对算法的理解。本程序动态演示了排序过程,详尽体现涉及到的各个细节,力求让初学者更好地理解这两个算法...
总之,冒泡排序作为一种经典的排序算法,虽然在实际工程中由于效率问题很少被直接使用,但对于理解排序算法的基本原理和编程思维训练具有不可替代的价值。通过对冒泡排序的学习,可以为进一步学习更复杂的排序算法...
### 对冒泡算法的改进 #### 背景与意义 冒泡排序是一种简单的排序算法,在数据处理领域有着广泛的应用。其基本原理是通过不断交换相邻元素的位置来达到排序的目的。传统的冒泡排序方法需要对整个序列进行多次遍历...
### C#中的冒泡排序算法详解 #### 一、冒泡排序算法简介 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,...
改进后的冒泡算法主要通过引入一个标记来优化这一问题。在每一轮遍历中,如果未发生任何交换,说明序列已排序,可以提前结束排序过程,从而减少不必要的比较和交换操作。 易语言冒泡改进算法的关键在于: 1. 使用一...
冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python...
这是一个实现汇编冒泡算法的例子(asm文件),里面注释详细,是实现一组16位的数组的排序的算法
根据题目中的描述和提供的部分代码,我们可以看到一个完整的冒泡排序算法实现。下面将对这段代码进行详细的解析: ```csharp private void MainSub() { int[] m = {2, 8, 43, 3, 33, 1, 35, 34, 6, 9}; int[] n =...
针对原始冒泡算法的不足,我们引入了“改进的冒泡算法”。这种改进主要体现在增加了一个标志位,用于检测在一次完整的遍历中是否发生了任何交换。如果在一轮比较中没有发生任何交换,说明数组已经有序,此时可以提前...
冒泡排序算法是一种基础的排序算法,通过重复遍历要排序的数列,比较相邻的两个数,如果前一个比后一个大,则将它们两个对调。每一轮遍历结束后,数列中的最大值就会“冒泡”到数列的末尾。简单来说,就是通过重复...
在分析"冒泡算法.vi"这个程序时,我们可以深入研究每个部分的功能,包括输入和输出的数据类型,以及如何使用LabVIEW的编程结构和函数来实现冒泡排序的逻辑。这有助于我们提升对LabVIEW编程的理解,以及对冒泡排序...
冒泡算法的改进具体实现 冒泡算法是最简单的排序算法之一,主要思想是通过比较相邻元素的值,并交换它们以达到...本文件主要介绍了冒泡算法的改进具体实现,讨论了基础冒泡算法和精简算法的实现,并提供了测试程序。
总之,冒泡排序是计算机科学中最基本的排序算法之一,对于初学者来说,掌握它的原理和实现方式是学习算法和数据结构的重要步骤。通过分析和实践提供的Java代码,你可以进一步提升自己的编程技能。
如果你对算法优化或者用户界面设计有更深入的需求,也可以在此基础上进行扩展,例如添加更多类型的排序算法进行比较,或者改进图形效果,使其更加直观和吸引人。 总的来说,这个项目是一个很好的学习实践,它将理论...
C语言冒泡算法视频讲解,两个积分买不了上当、买不了受骗……
这个改进版的冒泡排序算法在处理部分有序或完全有序的数据集时表现更优,因为它能有效地减少比较次数。虽然冒泡排序的时间复杂度仍为O(n^2),但在实际应用中,这样的优化可以使算法在特定情况下表现出接近线性的性能...