码迷,mamicode.com
首页 > 编程语言 > 详细

《啊哈算法》——排序

时间:2016-04-28 00:03:27      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

  今天开始了对《啊哈算法》这本书的学习。概括来讲,这本书算是算法界的小白书,语言很通俗,介绍的算法也比较简单,现在回来看简单的东西会不会显得浪费时间呢?不然,笔者最近感觉竞赛并不是终极之道,学习的方向也改为以书为对象(《具体数学》一栏的设立便可以看出),开始慢慢完善专业知识的体系,并慢慢做一些实用性的东西。

 

  对于排序问题,是算法需要解决的基本问题,而排序也有很多种,其不同的方法也决定了其不同的效率,下面我们来看几种常见的排序方法。

 

  桶排序:

  给出一组样例:将5、8、3、1、7从小到大的排序。

  桶排序基于一维数组,给出这样排序方法:初始化数组a[10] = 0,然后a[5]++、a[8]++、a[3]++、a[1]++、a[7]++。随后我们控制循环语句,访问a[i],并将i输出a[i]次,最终我们便会得到由小到大的排列。而这个过程,也像其名字所描述的,将数据i扔到了下标为i的数组元素a[i]这个桶里。

  桶排序巧妙的把数i当做一维数组的下标,而用a[i]记录i出现的次数,利用下标自小到大的排列顺序完成了对数据的排列。其优点是简易明了,但是缺点也很明显,我们所开的数组长度是受内存空间限制的,因此随着数据的扩大,该排序便显得捉襟见肘了。

  下面我们来简单的实现一下这个桶排序。

 

#include<cstdio>
int main()
{
      int a[11] , i , j , t;
      for(i = 0;i <= 10;i++)
          a[i] = 0;

      for(i = 1;i <= 5;i++)
      {
           scanf("%d",&t);
           a[t]++;
      }

          for(i = 0;i <= 10;i++)
              for(j = 1;j <= a[i];j++)
                printf("%d ",i);

         

          return 0;
}

 

《啊哈算法》——排序

标签:

原文地址:http://www.cnblogs.com/rhythmic/p/5440732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!