【C语言实现冒泡排序】

亲爱的总有些事没办法教..........................................................................................................


前言

介绍冒泡排序的思想,和实现方式。


提示:以下是本篇文章正文内容,下面案例可供参考

一、【冒泡排序的介绍】

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。核心思想就是:两两相邻的元素进行比较。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”

举个通俗的例子:给定6,4,1,2,9,3,7,8,10,5这10个数字要求将这10个数字按从小到大的形式进行排序,运用冒泡排序的思想就是:先用6和4比,因为6>4则交换6,4

变为4,6,1,2,9,3,7,8,10,5然后再用6和1进行比较...........直到交换为

4,1,2,6,9,3,7,8,10,5此时由于6<9则用9继续往下交换,直到交换为

4,1,2,6,3,7,8,9,10,5时,因9<10所以10与5进行比较,10>5则交换10,5最终变为4,1,2,6,3,7,8,9,5,10这样我们就完成了1趟冒泡排序,一直重复该操作,最终可以达到效果,这里用图片表示:

二、【实现思路】

2.1【思路刨析】

显而易见的我们可以发现,当有10个元素时,每进行一趟冒泡排序,10个元素中最大的元素最终会被交换到最右边,而在这第一趟冒泡排序中共有9对元素进行了“比较+交换”操作,如此第二趟则有8对元素...........而这10个元素则总共需要进行9趟冒泡排序才能排序完成。

所以当有n个元素时,共需进行n-1趟冒泡排序,每一趟冒泡排序中又需要对n-1对相邻元素进行“比较+排序”操作。

2.2.【代码编写注意】

1.由于我们需要确定冒泡排序的趟数和每趟的操作数,所以需要盛放元素数组的大小,需要注意的是,我们在计算大小sz时应提前计算,之后将sz作为参数传入bubblr_sort函数,而不是,在函数内部计算。

2.确定好冒泡排序的趟数和每趟的操作数,即趟数为n-1,操作数为n-1-趟

3.时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。
所需的关键字比较轮数C和记录移动轮数M均达到最小值:C=n-1和M=0。
所以,冒泡排序最好的时间复杂度为O(n)
若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i轮关键字的比较(1≤i≤n-1),且每轮比较都必须移动记录三轮来达到交换记录位置。
在这种情况下,比较和移动轮数均达到最大值:C=[n(n-1) ]/2=O(n^2) , M=[3n(n-1)]/2=O(n^2)
所以,冒泡排序的最坏时间复杂度为O(n^2)
综上,冒泡排序总的平均时间复杂度为O(n^2)

三、【代码部分】

代码:

void bubble_sort(int arr[], int n)
{
    int flag=0;
	for (int i = 0; i < n - 1; i++)
	{
        flag=0;
		for (int j = 0; j < n - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
                int flag=1;
			}

		}
        if(flag==0)//定义一个标识量,如果在这里flag的值没有改变说明,这一趟冒泡排序不需要进行
        {//交换操作,同时也说明,冒泡排序已经完成了。
           break;
        }
	}

}
int main()
{
	int n = 0;
	int arr[100] = { 0 };
	printf("输入要排序的个数:\n");
	scanf("%d", &n);
	printf("输入要排序的数,以换行来分隔\n");
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	bubble_sort(arr, n);
	for (int j = 0; j < n; j++)
	{
		printf("%d ", arr[j]);
	}
	return 0;
}

运行结果:


总结

关于冒泡排序的分享就到这里了。


........................................................................................我戒不掉她的微笑,洋溢幸福的味道

                                                                                                              ————《她的睫毛》

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值