冒泡排序总结

/*
冒泡排序和直接插入排序的思想个人感觉很像,都是将待排序序列分为有序序列和无需序列。
只不过冒泡排序每一趟都能确定一个元素的最终位置,而直接插入排序最坏的情况下,最后一次
才能确定。


冒泡排序的思路:一趟排序选择顶端(末端)的一个元素,顺序的和其他的所有元素做比较,直到遇到
有比它大的(小的)就停止,拿这个比较大的元素继续作比较,知道到达末端,本趟排序结束。


若是从顶端(即下标最小的一端)开始,遇到比它大的元素然后交换,那就是下沉法。若是从末端开始,遇到小的
交换是起泡法。还有双向的冒泡排序,就是一趟排序同时确定最大和最小的元素双端冒泡。


时间复杂度方面:最好的情况下是本来就是正序那么需要n次,不需要交换时间复杂为O(n),最坏情况下为逆序,
每次需要和剩余的所有元素作比较,那么就是(n-1)*n/2
*/

/*下沉法*/
public class BubbleSort
{
	public static void main(String[]args){
		int a[] = {12,5,43,6,2,54,8};
		int i,j;
		for(i=0;i<7;i++){
			
			j = 1;//刚开始的时候写成了j=i+1,应该是起泡的


			while(j<7-i){//每趟排序确定一个最大的元素的位置,因此后面的就不需要比较了
				if(a[j-1]>a[j]){
					int temp = a[j];
					a[j] = a[j-1];
					a[j-1] = temp;
				}
				j++;
			}
		}


		for(int k=0;k<7;k++){
			System.out.println(a[k]);
		}
	}//main
}
/*气泡法*/
public class BubbleSort02
{
	public static void main(String[]args){
		int a[] = {12,5,43,6,2,54,8};
		int i,j;

		for(i=0;i<7;i++){
			j = 6;

			while(j>i){
				if(a[j]<a[j-1]){
					int temp = a[j];
					a[j] = a[j-1];
					a[j-1] = temp;
					
				}
				j--;
			}
			System.out.println(a[j]);//用于观察每次找出的最小的元素
		}

		for(int k=0;k<7;k++){
			System.out.println(a[k]);
		}
	}//main
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值