关于冒泡排序和桶排序的简单介绍

本文有部分图片和观点参考《啊哈!算法》

 

一,首先先介绍桶排序:

  先举一个例子:班级中有五个同学在考试中分别取得了5分,3分,5分,2分和8分。现在要编写一个程序将同学们的分数从大到小进行排序。

  这里对于桶排序来说就要引入一个一维数组了,下面是算法的描述:

        首先要将数组初始化为0(代表分数没有被得到过)假设处理第一个人的分数是8,则让a[8]的值加一

       

 

 

       重复上面的操作最后得到

 

       

 

 

   现在只要从尾到头的打印这个数组就可以得到这组排序之后的数字。

 

 

         下面是相关代码:

         

 

         下面这个图我觉得对于我理解桶排序有很大的帮助:、

         

 

  (这个图来自《啊哈!算法》的第五页)

   

 

二,冒泡排序:

  通过查找资料得知,桶排序的效率太低了,需要一个个进行判断,如果数字很大的话非常的浪费空间。所以我作为一个初学者还是更喜欢用冒泡排序。

        冒泡排序在我看来有两个核心:

      1:交换:通过遍历和判断不断的将大或小的数往后面换

      2:循环嵌套的思想

        下面来进行举例子:假设对35 12 99 18 76进行从大到小的排序。选取第一个数35与后面的12进行比较,因为35大于12所以不需要交换,12再与99比,12小于99,所以将99放到前面去,以此类推,将得到35 99 18 76 12,将12放在了最后,这称为“ 一 趟 ”。在用这种方法将剩下四个数归位。注意最后一次是自动归位,只剩一个数循环没必要继续。所以只要进行n-1趟就好了。下面是一趟的图

                                                                                                      

 

 

 

不多说了直接上代码!!!

 

 但是!!这种写法在后面pta中做到字符串的时候却不起作用。这种写法只是针对数字而言。看下面这段代码:

 

 

 

 

 

 

 这题是比较字符串的大小,这里用的明显不是上面的方法但是整体的框架是一样的。不一样的是大小的比较变成的相应函数的应用。下面先注释两个函数:

1,strlen:得到字符串的大小

 

2,strcpy(字符数组1,字符数组2):将字符数组2复制到字符数组1上。

这个地方直接用strlen来比较大小,strcpy来进行字符数组之间的赋值。一些的注意点我的代码上有部分注释。

这里我有看过一些别人的代码这里的比较大小可以换成strcmp(字符数组1,字符数组2)>0或者<0的形式。用这个函数同样可以进行大小的比较但是没那么直接。

第一次写博客还有很多不成熟的地方,感谢观看!!!        

posted @ 2021-09-25 21:27  prize  阅读(196)  评论(1)    收藏  举报