温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

冒泡排序及其优化

发布时间:2020-07-02 16:46:18 来源:网络 阅读:972 作者:刘二阳二阳 栏目:编程语言

冒泡排序的基本思路是(以升序为例):每次将相邻两个数字进行比较,将小的数字放在大的前边。例如已知六个数字为9,8,5,4,2,0,第一次现将最前边的9和8进行调换,其次再将9和5进行调换......如图(只进行了两趟交换)

冒泡排序及其优化

如此进行下去,如果有n个数,就要进行n-1趟比较;在第一趟要进行n-1次交换,在第j次就要进行n-j次交换。

void bubble_sort(int *p,int sz)              //冒泡排序
{
	int i = 0;
	int temp = 0;
	for(i=0; i<sz-1; i++)
	{
		int j = 0;
		for(j=0; j<sz-i-1; j++)
		{
			if(*(p+j) > *(p+j+1))
			{
				temp = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = temp;
			}
		}			
	}
}


假设有一组数字:1 2 3 4 5 6 7 8 9 0,那么用上边的方法也是可以实现的,但是,对于前边9个数字来说它们已经是有序的了,如果还用这种方法就会使效率降低很多(假设有n个数),因此,在此基础上可以将代码优化——每趟比较时,如果相邻两个数字之间满足升序或者降序的要求,那就不在交换,如果不满足,就前后交换。

void bubble_sort(int *p,int sz)              //冒泡排序--优化
{
	int flag = 1;
	int i = 0;
	int temp = 0;
	for(i=0; i<sz-1; i++)
	{
		int j = 0;
		flag = 1;
		for(j=0; j<sz-i-1; j++)
		{
			if(*(p+j) > *(p+j+1))
			{
				temp = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = temp;
				flag = 0;
			}
		}			
		if(flag == 1)
		{
			return ;
		}
	}
}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI