`
wojiaolongyinong
  • 浏览: 74071 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

算法可视化系列——排序算法——冒泡排序

阅读更多

排序算法可视化系列——篇五“冒泡排序”

 

冒泡排序

   基本思想分析:

       冒泡排序是大家都很熟悉的排序算法了,因为用这个排序方法的地方很多,我记得就是计算机基础的老师都讲过,冒泡排序之所以称为这样,是因为它的排序过程很像水泡从水下面到上面的过程。而且在冒泡排序中,我们可以从前往后进行冒泡,也可以从后向前进行冒泡,因为什么呢,因为冒泡排序的思想很简单,就是根据大小交换相邻的两个元素的位置,从后向前(或是从前向后)一直将相邻的两个元素进行交换,直到最大或是最小的元素处于数组的最左边或是最右边(这看你是按哪种大小顺序进行排序)。

 

   算法描述:

//我们假设对于简单的整型数组进行排序,而且按照从小到大的顺序进行排列

for(对于整个数组进行循环i=1~n-1){

  判断数组已经有序,如果有序则不进行下面的冒泡

for(从位置i元素开始进行冒泡的过程j=i~n-1){

比较相邻元素的大小,如果j大于j+1,则交换两个元素

}

}

 

    算法分析:

我们可以从上面的算法描述中可以看出,冒泡排序在最糟糕的情况下,其时间复杂度为O(n^2),最好的情况是在排序之前数组已经有序,那么其此时的时间复杂度为

O(n),因此冒泡排序在基本有序的数组中其效率还是可观的。

 

基本的Java语言实现:

 

/**
* 冒泡排序的基本Java语言实现
* 此处是对于基本的整型数组,按照从小到大的顺序进行排序
*/
public class AlgorithmBubleSort{
  public static void bubleSort(int[] array){
    boolean isOrdered = true;
    int length = array.length;
    /**
    * 只需要进行n - 1次循环即可,因为后面n - 1个元素有序
    * 就说明整个数组已经有序
    */
    for(int i = 0; i < length - 1; i++){
      /**
      * 进行判断是否已经有序
      */
      if(isOrdered){
	isOrdered = false;
	/**
	* 进行冒泡的过程
	*/
	for(int j = 0; j < length - i - 1; j++){
		if(array[j] > array[j + 1]){
		  array[j] += array[j+1];
		  array[j+1] = array[j] - array[j+1];
		  array[j] = array[j] - array[j+1]; 
		  isOrdered = true;
		}//end if
	}//end for
      }else{
	break;
      }
     }//end for
    }//end bubleSort
}

 

下面是关于冒泡排序的动态演示:

一、排序中。。。。。。



 二、排序中。。。。。。



 三、排序完成



 上面是对冒泡排序的动态演示,下面附源代码:

 

  • 大小: 33.5 KB
  • 大小: 32.5 KB
  • 大小: 31.2 KB
5
5
分享到:
评论
19 楼 wojiaolongyinong 2013-05-21  
bewithme 写道
楼主你这个播放得太快了,不利于观察学习。还应加上相应的文字说明好一些。

收到。。。。嘿嘿,你可以在源代码里面改一下那个stop()方法,把时间放慢一点。。。。
18 楼 bewithme 2013-05-21  
楼主你这个播放得太快了,不利于观察学习。还应加上相应的文字说明好一些。
17 楼 wojiaolongyinong 2013-05-21  
jeffyan 写道
闲着蛋疼也写了一个


static int[] intArraySort(int a[]) {
int swap;
int count = 0;
for (int i = 0; i < a.length; i++) {
for (int n = i; n < a.length; n++) {
if (a[i] > a[n]) {
swap = a[i];
a[i] = a[n];
a[n] = swap;
count++;
}

}

}
System.out.println("count=" + count);

return a;

}

这个个人感觉再改写一下吧,像上面说的,这个排序过程会执行(n+1)n/2次比较,不管数组是否已经有序,所以对于基本有序数组这个排序不是很好。但很简洁,对于小量数据进行排序,很多人一般都这样写冒泡排序。
16 楼 jeffyan 2013-05-21  
闲着蛋疼也写了一个


static int[] intArraySort(int a[]) {
int swap;
int count = 0;
for (int i = 0; i < a.length; i++) {
for (int n = i; n < a.length; n++) {
if (a[i] > a[n]) {
swap = a[i];
a[i] = a[n];
a[n] = swap;
count++;
}

}

}
System.out.println("count=" + count);

return a;

}
15 楼 wojiaolongyinong 2013-05-21  
mnpqxz 写道
博主,请问那个切换单选项之后加载图片的时候你是不是将上次结束时的图片先清空,然后再加载新的图片吗?

对的。。。先清空再画。。。
14 楼 mnpqxz 2013-05-21  
博主,请问那个切换单选项之后加载图片的时候你是不是将上次结束时的图片先清空,然后再加载新的图片吗?
13 楼 wojiaolongyinong 2013-05-20  
整个源代码已更新。。。如有需要请下载AlgorithmSort.zip文件即可
12 楼 mnpqxz 2013-05-20  
所附源代码只是整个程序的一部分,其它在前面的几篇博客中。。。。
11 楼 kenchen0805 2013-05-20  
大哥,请问java 有Data类型吗?
public class AlgorithmBubleSort {
/**
* 用来存储Data数据类型的数组
*/
private Data array = new Data[20];

/**
* 接收面板的开始按钮
*/
private JButton jb = null;

/**
* 重写构造函数
* @param gr
*/
10 楼 wojiaolongyinong 2013-05-20  
mnpqxz 写道
博主,还有一个DrawLine类没有给出

奥奥。。。。是我大意了,晚上我回宿舍了给你发到邮箱,白天还有好多课呢。。。嘿嘿
9 楼 mnpqxz 2013-05-20  
博主,还有一个DrawLine类没有给出
8 楼 mnpqxz 2013-05-20  
哦,知道了,谢谢博主啊,学习博主的精华啊
7 楼 wojiaolongyinong 2013-05-20  
mnpqxz 写道
里面有几个外包没有无法运行啊,求引入包,邮箱251275671@qq.com

奥奥,那是因为你没有下载前面博客里面的源代码,在前面插入排序那一个里面去下就可以了。。。。嘿嘿嘿
6 楼 mnpqxz 2013-05-20  
里面有几个外包没有无法运行啊,求引入包,邮箱251275671@qq.com
5 楼 mnpqxz 2013-05-20  
里面有几个外包没有无法运行啊,求引入包
4 楼 jilo88 2013-05-20  
有意思,第一次看到这种展示风格的排序,以往都是直接打印得了。好。。
3 楼 wojiaolongyinong 2013-05-19  
pandaren 写道
图文并茂啊 这个好...

前面几篇博客也是说排序的。。。图文并茂哈。。。嘿嘿
2 楼 pandaren 2013-05-19  
图文并茂啊 这个好...
1 楼 wojiaolongyinong 2013-05-19  
所附源代码只是整个程序的一部分,其它在前面的几篇博客中。。。。

相关推荐

    C#简单的排序算法可视化程序

    在本文中,我们将深入探讨C#编程语言中的几种基本排序算法——冒泡排序、插入排序以及快速排序,并结合“C#简单的排序算法可视化程序”这一主题,了解如何将这些算法进行可视化展示。在这个Windows Forms应用程序中...

    各种排序算法可视化

    **排序算法可视化** 排序算法是计算机科学中的基本概念,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序(如升序或降序)排列。本项目提供了十种不同的排序算法的可视化展示,通过C++语言实现,这有助于...

    冒泡排序可视化、冒泡排序动画版

    总的来说,“冒泡排序可视化”和“冒泡排序动画版”是教育和技术结合的优秀示例,它们利用现代前端技术将抽象的算法实体化,提升了学习效率和兴趣,对于初学者和教学者来说都是一份宝贵的资源。而“vuejs-bubble-...

    数据结构课设排序算法的可视化演示(QT+C++)

    在这个课设中,我们关注的是排序算法的可视化实现,这是理解和学习算法的一种重要方式。通过使用QT+C++,我们可以创建交互式界面来直观地展示各种排序算法的工作原理。 首先,让我们了解一下排序算法。排序是将一组...

    利用前端动画实现算法可视化,比如各种排序算法动画实现.zip

    这个名为"利用前端动画实现算法可视化,比如各种排序算法动画实现.zip"的资源包,旨在帮助我们利用前端技术来动态演示算法的过程,特别是各种排序算法。这不仅能够帮助初学者更好地理解算法的工作原理,也对专业...

    3种排序算法可视化程序 c++ 算法

    在这个C++实现的项目中,我们有三种经典的排序算法被可视化:冒泡排序、插入排序和选择排序。这些算法的可视化能够帮助我们更好地理解它们的工作原理。** ### 冒泡排序 冒泡排序是最基础的排序算法之一,它通过重复...

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

    总的来说,这个项目是一个很好的学习实践,它将理论知识与实际应用结合起来,帮助初学者更好地理解冒泡排序这一基础算法,并通过Qt的可视化能力提升编程技能。通过研究和扩展这个项目,你不仅可以掌握冒泡排序,还能...

    Android-Android图形化展示排序算法

    在Android应用中实现图形化排序算法,首先需要了解各种基本的排序算法,例如冒泡排序、选择排序、插入排序、快速排序、归并排序以及堆排序等。这些算法各有特点,如冒泡排序的时间复杂度为O(n^2),适用于小规模数据...

    三十种排序算法的可视化

    标题中的“三十种排序算法的可视化”指的是一个项目或软件,它通过图形化的方式展示了三十种不同的排序算法的运行过程。排序算法是计算机科学中基础且重要的部分,用于组织和整理数据,使得数据按照特定顺序排列。这...

    课程设计算法可视化实现

    《课程设计:算法可视化实现——探索数据结构的魅力》 在当今的计算机科学领域,数据结构与算法是不可或缺的基础,它们是编程的灵魂,是解决问题的关键。本课程设计的主题为“算法可视化实现”,旨在通过实践帮助...

    8种排序算法可视化

    八种排序算法分别是: 1.冒泡排序; 2.选择排序; 3.插入排序; 4.快速排序; 5.归并排序; 6.希尔排序; 7.二叉排序; 8.计数排序; 其中快排尤为重要,几乎可以说IT开发类面试必考内容,而希尔排序和归并...

    可视化排序算法程序

    **可视化排序算法程序详解** 排序算法是计算机科学中不可或缺的一部分,它主要用于整理和优化数据结构。这个"可视化排序算法程序"提供了一种直观的方式,帮助我们理解和欣赏各种排序算法的运行过程。通过声音和视觉...

    C#实现各个算法可视化

    对于**排序算法**,如在文件名为"sorts"的子文件中所暗示的,是算法可视化中的常见主题。常见的排序算法包括: 1. **冒泡排序**:通过重复遍历待排序的元素列表,每次比较相邻两个元素并交换位置,直到列表排序完成...

    7种排序算法可视化(matlab版本).rar

    这个压缩包文件"7种排序算法可视化(matlab版本).rar"包含了一个MATLAB实现的项目,它提供了对七种常见排序算法的可视化展示。这些算法包括选择排序、快速排序、希尔排序、归并排序、插入排序、冒泡排序以及猴子...

    冒泡排序算法的动态演示程序

    ### 冒泡排序算法的动态演示程序:深入解析与实现 #### 一、冒泡排序算法简介 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。...

    Qt多线程可视化多线程排序算法演示:冒泡和快排

    资源描述:基于Qt的可视化界面,编写的冒泡排序和可视化排序的比较算法,通过生成10000个随机数,多线程进行排序比较,可直观看到时间复杂度对程序运行的影响程度。 可以学到的知识:Qt多线程,多进程,冒泡排序算法...

    Python-通过opencvpython可视化几种著名的排序算法

    OpenCV是一个强大的计算机视觉库,通常用于图像处理和视频分析,但在这里我们将其应用于可视化著名的排序算法。本项目名为"Sorting_Visualization-master",其目标是利用OpenCV-Python将常见的排序算法如冒泡排序、...

    java语言排序——选择排序法和冒泡排序法(排序时间的测试盒比较)

    图片文件`1409193.png`, `1409190.png`, 和 `1409197.png`可能是用于辅助理解这些排序算法的可视化表示,例如展示排序过程中的元素移动或者时间复杂度对比图。 在实际应用中,我们通常会使用更高效的排序算法,如...

Global site tag (gtag.js) - Google Analytics