`

冒泡算法和改进算法

阅读更多
首先明确下冒泡排序的思想

冒泡排序(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,在以后...

    冒泡排序及其改进算法C语言实现 冒泡排序及其改进算法C语言实现 冒泡排序及其改进算法C语言实现

    3进一步改进的冒泡排序,如果在某次冒泡过程中,最后一次进行交换的位置为flag,则表示flag之后的序列已经有序,那么下一次冒泡就无需比较flag之后的序列,即只要比较到flag就可以结束此次冒泡过程。当flag=0时,...

    冒泡算法的实现

    C冒泡算法的实现

    冒泡算法和选择算法演示程序

    基于C语言的排序算法演示程序,包含了“冒泡算法”和“选择算法”两个基础的排序算法。学习程序设计,重点是对算法的理解。本程序动态演示了排序过程,详尽体现涉及到的各个细节,力求让初学者更好地理解这两个算法...

    易语言冒泡改进算法

    易语言冒泡改进算法源码,冒泡改进算法,算法_冒泡,算法_冒泡_改进

    冒泡算法的实例详细代码

    冒泡算法的实例详细代码让你更容易理解算法

    CSHARP冒泡算法实例

    参加多次笔试,居然有几次都考到了冒泡算法.现将原代码分享如下.C#的算法,很精典!请大家多多关注,不好可以骂我! 现在面试用到很多的,可以下载看看

    汇编 冒泡算法(字)

    这是一个实现汇编冒泡算法的例子(asm文件),里面注释详细,是实现一组16位的数组的排序的算法

    论文研究-冒泡排序及其改进算法的分析与比较 .pdf

    冒泡排序及其改进算法的分析与比较,曾希君,,冒泡排序算法是大家最为熟悉的排序算法之一,传统的冒泡排序算法过程很简单,并广泛应用于现在的教学及科研中,传统冒泡排序算法

    对冒泡算法的改进

    对一组无序的数字进行排序,冒泡方法是我们常用的一种方法。它的主要思想是对相临的两个数字进行比较然后选较大(小)的一个起来,另一个沉下去。对N个数字,我们需要进行N-1趟,但是有时候我们根本不需要对每一组...

    用C++语言实现冒泡算法

    用C++语言实现冒泡算法,是大家对冒泡算法有一定的了解和学习。 #include "stdio.h" void main() { int array[5],temp; printf("输入五个数字: "); for (int t=0;t;t++) { scanf("%d",&array[t]); } //...

    c语音做的冒泡算法改进

    这是我在学习冒泡算法后,针对算法的一些不足做的一个改进。使其执行效率更快。

    冒泡算法.vi_LabVIEWAlgorithm_LabVIEW冒泡算法_labview_

    LabVIEW实现冒泡算法求数组最大值

    冒泡排序算法,有传统算法也有双向冒泡

    本文对冒泡排序算法中的单向冒泡改为双向冒泡,从而实现了冒泡算法的改进,提高了排序的运算速度 。

    冒泡算法讲解

    C语言冒泡算法视频讲解,两个积分买不了上当、买不了受骗……

    可视化展示冒泡算法实现效果

    该源码使用Qt可以可视化展示冒泡排序算法实现效果,方便初学者理解冒泡算法,如果你有一些其他的小需求,可以在此基础上修改完善

    C#冒泡算法asp.net

    C#--冒泡算法 C#--冒泡算法C#--冒泡算法 C#--冒泡算法C#--冒泡算法 C#--冒泡算法C#--冒泡算法 C#--冒泡算法C#--冒泡算法 C#--冒泡算法C#--冒泡算法

    冒泡算法实现Java代码

    冒泡排序算法实现,提供相关代码学习代码算法实现,技术原理实现以及更多相关的代码资源:关注码农的博客,代编码和合作vx:lcz950818,备注:合作

    冒泡算法的演示使用C#编写的

    解说冒泡算法的使用方法这个编程使用c#编写的。演示它们是如何惊醒交换的

    JAVA冒泡排序算法

    冒泡排序算法详细分析那还等hi实地阿基hihi大UI一及对阿迪年hiue一群

Global site tag (gtag.js) - Google Analytics