新手上路系列1:冒泡排序与选择排序的C语言程序实现

来源:互联网 发布:淘宝小二旺旺 编辑:程序博客网 时间:2024/06/06 12:23

新手上路系列1:冒泡排序与选择排序的C语言程序实现


虽然是一个新手,但简单的冒泡排序与选择排序的实现竟然花了整整一天时间,实在是有点说不过去。简单的整理了一下我这一天所谓的成果。


泡排序:简单的来说,冒泡排序就是比较一个数组中前后两个元素,对其进行所需的排序,然后进行下一组的       两个元素的操作,以此循环最终得到一个排列完成的序列。

以上就是本人绞尽脑汁编出来的对于一个含有4个元素的数组进行冒泡排序的程序。当然,对于更多元素的数组只需要改动部分程序参数即可。

这边主要要提到的就是一个遍历整个数组的实现,我使用的方法是在外层嵌套一个for循环,循环次数即元素个数。另外就是,对于数组元素的值的互换,这边使用的方法没有引入参数。


选择排序:其实冒泡排序就是选择排序最坏的一种情况,选择排序需要完成的过程是取一个数与它后面的数依次比较,用一个变量来记住其中最小的元素的位置,在循环结束时判断这个位置是否在第一个,不是则与其交换下值。接着找出第二小的,第三小的,以此类推。

这边,相比较之前的冒泡,程序已经完善了不少,可以自由输入所需要排列的数的数目,再进行读入(忽略不堪入目的英文翻译)。

在主要的循环结构中,定义了k这样一个变量,它所指向的是数组a中最小的数,如果不是,则把那个数的地址赋给k,即保证k最小。这样在循环结束时,当k不等于i时,将k所指向的那个最小的数与最前面的i交换就可以完成排序的操作。这里千万要注意的是,不要忽视k这个值而直接把比较得到的较小的数赋给a[i]!因为这样的话,它本身依旧保存着这样一个较小的数,再和之后的进行比较就会影响结果(我不会说我这个年轻的司机在这边被折磨了整整半天时间啥事都没做)。

最后,为了美观,我打印了一个'<',但最后一个数不能以这样的符号结尾,所以只好不把它计入循环,另外提出来作为结尾,至于为什么是(m == t - 1),就是一个数组的第一位是a[0]而不是a[1]的问题了。这里还有一个小细节,将最后的if条件写成(m = t - 1)虽然答案并不会改变,但逻辑上是完全不同的两个意思。

 

原创粉丝点击