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

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

 

冒泡排序

   基本思想分析:

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

 

   算法描述:

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

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
}

 

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

一、排序中。。。。。。



 二、排序中。。。。。。



 三、排序完成



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

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值