冒泡排序的体会

       冒泡排序属于交换排序的一种。

思想(升序为例)就是:

1.从数组的最后一个元素开始往前走,直到数组的第一个元素为止。

2.数组两两相邻元素之间进行比较,如果前一个比后一个大,则交换这两个元素的值。这样一趟下来,就会有一个最小值出现在数组的第一个元素位置。

3.然后再从数组的最后一个元素开始往前走,直到数组的第二个元素为止。数组两两相邻元素之间进行比较,如果前一个比后一个大,则交换这两个元素的值。这样一趟下来,就会有有一个第二小的值出现在数组的第二个元素位置。

4.这样重复步骤3.直到最大的元素出现在数组的第n个位置为止。

这样冒泡排序就排好了。

冒泡排序的性能分析:

最好的情况下:在如下代码中,i=0时,从j=n-1到j=i+1;比较了n-1次,发现数组已经有序,无序再排,直接返回。时间复杂度为O(n)。

一般情况下:冒泡排序的时间复杂度为O(n*n).

注意!

冒泡排序是一个稳定的排序方法。

原因:在两两相邻元素比较时,只有前一个比后一个大的时候,才发生交换。如果两者相等是不交换的。所以如果两相等元素初始是a在b的前面,排序完之后,还是a在b的前面。

注意!

这里要设定一个flag值,用来标识一趟中有没有发生交换。如果在其中的一趟中,没有发生交换(所有的两两相邻元素都是前一个比后一个小的话),则说明剩下的数组已经有序,直接返回即可。

void BubbleSort(int A[], int n){
	for(int i=0;i<n;i++){
		bool flag=true;
		for(int j=n-1;j>i;j--)
			if(A[j]<A[j-1]){
				int temp=A[j];
				A[j]=A[j-1];
				A[j-1]=temp;
				flag=false;
			}
		if(flag)//flag存在的目的是如果一趟中,没有发生任何交换,说明剩下的数组已经有序,无须再排。
			return;
	}
}


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值