当前位置: 首页 >> 冰棒老师 >> 冰棒老师+冒泡排序算法以及C++冒泡排序优化版 >> 正文

冰棒老师+冒泡排序算法以及C++冒泡排序优化版

4个月前 (08-14)     作者:冰斌棒     分类:冰棒老师     阅读次数:165     评论(0)    

冒泡排序法:

就是比较相邻的两个数的大小,进行相对条件的转换。

其最终的目的为:确定最右边的数字:

第一轮:确定最右边第一个

第二轮:确定最右边第二个

......

第N 轮:确定最右边第N 个 

为此,每一次比较的时候,内部循环都相比第一次少1。 

#include <iostream>
using namespace std;

int main(){
	int a[10];
	int x;
	for(x=0;x<10;x++){
		cin>>a[x];
	}

//  从小到大排序 
//	for(int i=9;i>=1;i--){
//		for(int j=0;j<i;j++){
//			if(a[j]>a[j+1]){
//				swap(a[j],a[j+1]);
//			}
//		}
//	}

// 从大到小排序
//	for(int i=9;i>=0;i--){
//		for(int j=0;j<i;j++){
//			if(a[j]<a[j+1]){
//				swap(a[j],a[j+1]);
//			}
//		}
//	} 

//	从左往右判断
//	for(int i=1;i<=10;i++){
//		for(int j=0;j<=10-i;j++){
//			if(a[j]>a[j+1]){
//				swap(a[j],a[j+1]);
//			}	
//		}
//	} 

	for(int i=0;i<10;i++){
		cout<<a[i]<<" ";
	}
	
	system("pause");
	return 0;
}



为了节约时间,防止已经完成排序还依旧运算,我们加入了一个控制变量flag。

有些数字的排序比较特殊,可能在前期的时候就已经能够排序完成了。

#include <iostream>
using namespace std;
int main()
{
	int i = 1,j=1,a[7]= {4,6,2,1,8,9,6};
	for(i=6;i>=0;i--){
	        //注意,要每次外层循环的时候,flag变为0
		int flag=0;
		for(j=0;j<i;j++){
			if(a[j]>a[j+1]){
				flag = 1;
				swap(a[j],a[j+1]);
			}
		}
		//比较完后,如果flag为0,则退出,表明已经排序好了
		if(!flag){
			break;
		}
		
		
		//测试代码 
		cout<<i<<" = "<<endl;
		
		for(int k=0;k<7;k++){
			cout<<a[k]<<" ";
		}
		cout<<endl;
	}
	
	for(i=0;i<7;i++){
		cout<<a[i]<<" ";
	}
	system("pause");
	return 0;
}



除非注明,发表在“冰斌棒博客”的文章『冰棒老师+冒泡排序算法以及C++冒泡排序优化版』版权归冰斌棒所有。 转载请注明出处为“本文转载于『冰斌棒博客』原地址http://mybbzy.com/?id=202

评论

发表评论   

昵称*

E-mail*(建议输入,以便收到博主回复的提示邮件)

网站