排序算法--冒泡排序

冒泡排序算是我们接触到的第一个排序,因为它简单,当然了也是有公司面试会问的。

原理:依照次序不断地两个两个向后比较,比较相邻元素,我们拿整数数组为例,并且我们按照升序排列。每一趟将一个最大的元素放到最末尾,进行n-1次比较即可(此处需要说明一下,有时候有改进,就是搞一个标记,如果遍历一趟,没有进行任何交换,那么这个数组也就已经排好序了,不需要再继续排序,则停止。这个时候可能不是遍历n-1趟)。

步骤:1、j代表这一趟遍历需要最终放好的元素的位置,i代表遍历没有排好序的元素,两两相邻比较

           2、j <— length-1..1, i <— 0..j-1

           3、遍历,如果第i个元素大于第i+1个,则进行交换,否则继续

           4、完成遍历,打印结果

分析:首先看时间复杂度,我们不考虑加标记这种情况,时间复杂度就是O(n^2),再看交换的时候我们是第i个大于第i+1才交换,所以它是稳定的,并且不需要其他存储,所以它是原地的。


代码展示:搞个JAVA写的代码看一下,当然,语言只是表述的方式,我们主要看思想和步骤。为了方便看每一趟排序的结果,我这里排完一趟我就打印一下整个数组。全部排完再打印一下。

public class BubbleSort {
	public static void main(String[] args){
		int[] array = {7, 11, 5, 8, 7, 2, 10, 1};
		sort(array);//排序
		System.out.print("排序结果:");
		for(int k : array)
			System.out.print(k + " ");
	}
	public static void sort(int[] target){
		if(target.length<=1)//判断长度小于等于1就没必要排了
			return;
		int i=0,j=0;
		for(j=target.length-1;j>=1;j--){//j可以看做是每趟最终要放好的元素的位置
			for(i=0;i<j;i++){//遍历还没放好的元素
				if(target[i]>target[i+1])
					exchange(target,i,i+1);
			}
			System.out.print("第"+(target.length-j)+"趟:");
			for(int num : target)
				System.out.print(num + " ");
			System.out.println();
		}
	}
	public static void exchange(int[] target,int left,int right){
		int tmp =  target[left];
		target[left] = target[right];
		target[right] = tmp;
	}
}

执行结果:

第1趟:7 5 8 7 2 10 1 11 
第2趟:5 7 7 2 8 1 10 11 
第3趟:5 7 2 7 1 8 10 11 
第4趟:5 2 7 1 7 8 10 11 
第5趟:2 5 1 7 7 8 10 11 
第6趟:2 1 5 7 7 8 10 11 
第7趟:1 2 5 7 7 8 10 11 
排序结果:1 2 5 7 7 8 10 11 

思想应该很清楚了吧。。当然,本人才疏学浅,描述有不当的地方,欢迎您指正,先在此谢过了~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值