C语言中冒泡排序的示例分析
这篇文章给大家分享的是有关C语言中冒泡排序的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
(壹)冒泡排序
1.1冒泡排序的设计
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
1.2冒泡排序的步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
????动图演示1(数据较小)
????动图演示2(数据较大)
1.3冒泡排序的实现
Tips:每一趟冒泡排序后都会减少一个需要比较的数 --> 因为每一趟的冒泡排序都会将所比较的最大/最小值移动到数组的最后面
(贰)数组作为函数参数
往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法思想)函数将一个整形数组排序。 那我们将会这样使用该函数:
2.1冒泡排序函数的错误设计
接下来看一个例子
最后结果:
并没有预料中的达到排序的作用
在我们之前的学习中,我们知道了 数组名表示的数组首元素的地址
数组名在传递给函数的时候,会降级变成首元素的地址
数组名单独放在sizeof内部的时候 ,如:sizeof(arr),这里的arr表示整个数组而不是首元素的地址
对数组名进行&取地址后的操作
我们知道,对指向数组元素的指针进行自增运算是跳过一个元素(所占字节数的地址),其实本质是跳过一个其指针类型大小。对数组名进行取地址后获得的是数组的地址,如果将它和数组首元素地址以及数组名打印出来,会发现它们的值是一样的。但如果对&arr进行+1等操作,就会发现跳过的不是一个元素的大小,而是一个数组的大小。
2.2冒泡排序函数的正确设计
当数组传参的时候,实际上只是把数组的首元素的地址传递过去了。所以即使在函数参数部分写成数组的形式:int arr[]表示的依然是一个指针:int *arr。那么,函数内部的sizeof(arr)结果是4。
(叁)对数组名的拓展解析
数组名就是首元素的地址,但是有两个例外
sizeof(数组名),这里的数组名表示整个数组,sizeof(数组名)表示的是整个数组的大小
&数组名,这里的数组名表示的是整个数组,取出的是整个数组的地址
&arr取出的是整个数组的地址,所以 arr + 1后跳过了整个数组的大小为
4 * 10 = 40 个字节的地址大小
感谢各位的阅读!关于“C语言中冒泡排序的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341