桶排序,冒泡排序和快速选择排序的实现

                                                                      桶排序,冒泡排序和快速选择排序的实现

 排序是常需要我们去解决的问题,在学习算法的过程中也接触到了几种常见的排序算法。不论使用什么样的语言去实现排序算法但是其原理都是一样的。那么在接下来的就介绍上面所说的三种排序算法。

   1.桶排序,可以将其描述为一个二维数组的储存数据的过程。在这里我们给出一组数据来进行说明,在这里我们需要对5 3 5 2 8这五个数进行排序,那么使用桶排序我们来比较10以内的数字进行排序。也就是我们在这里要设置11个桶a[0]对应0.......a[10]对应10。那为什么要这样设置呢,这是因为每一个桶都对应与其桶号相对应的数值。我们将需要排序的数放在桶里面,然后只要从小到大或者是从大到小依次输出桶号即可,如果这个桶里面有数据我们就输出,没有结果就不输出。最后得到的就是我们排序所要的最终结果。下面使用c语言实现桶排序的算法,代码如下:

在上面实现的算法中我们所实现的是从小到大的排序过程,那么要实现从大到小的排序需要我们做的就是将改变输出桶中数据的for(i = 0; i <= 10; i++)将其改为for(i = 10; i >= 0; i--)即可实现从大到小的输出。 

2.冒泡排序,对于冒泡排序需要我们了解的就是冒泡排序的比较过程,其基本的意思就是比较相邻两个元素的大小,如果不符合排序的规则就交换位置,直到一组数据比完,就完成一组数据的比较。例如10 35 99 18 76然后进行比较首先完成第一组数据的比较10和35比较,按照规则从大到小,第一组第一次比较后就变成了35 10 99 18 76,第一组第二次比较后35 99 10 18 76,第一组第三次比较后35 99 18 10 76,第一组第四次比较后35 99 18 76 10,最后最小的数就放在了最后的位置,这也就完成了第一次比较。比较的趟数就是总的需要比较的个数减去1。就这样完成剩余的组数比较就可以实现数据的比较,这个组数也就是需要比较的趟数。同样的不论使用那种语言去完成这个排序的算法,其比较的核心是并没有改变的。在下面的代码中是使用C语言来实现一组数据的比较过程。

   

在上面的算法中实现的是从大到小的算法排序,那么要实现从小到大的排序需要我们更改的就是将if(a[j] < a[j+1])改为大于即可。

3.快速选择排序,在快排当中其核心就是先找到一个基准数,一般一最左边的数为基准数。然后从右向左找到小于基准数的数最后在这个位置停下来,从左往右找到大于基准数的数,最后在其对应的位置停下面,最后交换两者的位置。当从右往左的哨兵和从左往右的哨兵相遇时,再将相遇的位置与基准数交换位置,最后一次比较完成之后要使得左边的数都小于这个基准数,右边的数要大于这个基准数,最后在基准数的右边与左边同时又进行这样的比较过程。即可完成一组数据的比较。那么在这里举一组数据来说明 6 8 5 3 9 7 5 2 1 7,首先最左边的6为基准数,从最左边的6设置一个左边的哨兵位,最右边的7开始设置哨兵位,然后开始查找第一个8>6的因此在这里停下,最右边的1<6因此在这里停下,两者交换位置就变为6 1 5 3 9 7 5 2 8 7最后这样依次进行到最后变为1 5 3 2 5 6 7 9 8 7这样就完成了一组数据的比较最后使用递归来循环操作这个过程即可实现整个排序。同样的在学习数据结果与算法我们需要掌握的是其核心是什么,用什么语言都不是问题。下面的代码是使用c语言写的,具体实现的代码如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值