排序算法总结(1)——冒泡排序

升序排列:从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序。

代码如下:

public class BubbleSort {
	private long a[];
	private int nElemts;
	
	public void bubbleSort(){
		int out,in;
		for(out=nElemts-1;out>1;out--){
			for(in=0;in<out;in++){
				if(a[in]<a[in+1]){
					swap(in,in+1);
				}
			}
		}
	}
	
	private void swap(int m,int n){
		int temp=m;
		a[m]=a[n];
		a[n]=temp;
		
	}

}

此算法的目的是将最小的元素放在数组下标为0的位置,并将最大的元素放在数组的最后,也就是下标为n-1的位置。

外层for循环的计数器out从数组的最后开始,即out=n-1,每经过一次循环,out减去1。比out大的元素已经是排序好的元素。

内层for循环的计数器in从0开始,即in=0,每完成一次循环in加1,当in=out时结束内层for循环。在内层for循环中,数组下标为in和in+1的两个数据项进行比较,如果下标为in的数据项大于下标为in+1的数据项,则交换两数据项。


效率问题:

数组中有N个元素,第一塘排序进行N-1次比较,第二次排序进行N-2次比较,一次类推。公式表示为(N-1)+(N-2)+...+1

交换次数可能少于比较次数,在完全逆序的最坏情况下才和比较次数相同

所以比较和交换次数都与N的平方成正比。

无论何时,只要看到一个循环嵌套在另一个循环里就可以怀疑运行时间为O(N2),


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值