【排序算法】 冒泡排序(java实现)

1.基本思想:

依次两两比较,较小的浮上来,较大的往下沉。


2.算法分析:

平均时间复杂度:O(n2)     

空间复杂度:O(1)  (用于交换)

稳定性:稳定

3.算法实现:

	public static void BubbleSort(int[] array){
		int tmp;
		for(int i=0 ; i< array.length-1 ; i++){
			for(int j =1; j < array.length-i; j++){
				if(array[j] < array[j-1]){    // 如果第j个元素 < 第j-1 个元素,交换位置,将大元素往后挪(下沉)
					tmp=array[j];
					array[j] = array[j-1];
					array[j-1] = tmp;
				}
			}
		}
		
	}

4.算法优化:

 加入一标志性变量flag,用于标志某一趟排序过程中是否有数据交换,如果进行某一趟排序时并没有进行数据交换,则说明数据已经按要求排列好,可立即结束排序,避免不必要的比较过程。

<span style="white-space:pre">	</span>public static void BubbleSort(int[] array){
		int tmp;
		boolean flag = true;    //记录是否存在交换
		for(int i=0; i< array.length-1 ; i++){   
			flag = false;
			for(int j =1; j < array.length-i; j++){
				if(array[j] < array[j-1]){
					tmp=array[j];
					array[j] = array[j-1];
					array[j-1] = tmp;
					flag = true;     
				}
			}
			if(! flag) break;   上一趟比较中不存在交换,则退出排序
		}
		
	}


传统的排序算法在一次排序中,只能找到一个最大值或最小值, 考虑利用在每趟排序中进行正向和反向两遍冒泡的方法一次可以确定两个最终值(最大者和最小者) , 从而使排序次数减少。

<span style="white-space:pre">	</span>public static void Bubble2Sort(int[] array){
		int low= 0 , high = array.length -1;
		int tmp;
		while(low < high){
			//正向,确定最大值
			for(int i =low+1;i < high +1; i++){
				if (array[i] < array[i-1]){
				tmp=array[i];
				array[i] = array[i-1];
				array[i-1] = tmp;
				}
			}
			low++;
			//反向冒泡,确定最小值
			for(int i =high-1 ;i >= low; i-- ){
				if (array[i] < array[i-1]){
					tmp=array[i];
					array[i] = array[i-1];
					array[i-1] = tmp;
				}
			}
			high--;
		}
	}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值