快速入门排序算法——桶排序(简化版)

桶排序(简化版)

最简单的排序

在我们生活的世界中很多事务都是被排序过的。成绩会排名,网购会分热度排序,邮件按照时间来排序,生活很多东东都需要排序,可以说排序是无处不在。现在我们举个具体的例子来介绍一下排序算法。

     期末考试完了老师要将同学们的分数按照从高到低排序。小哼的班上只有5个同学,这5个同学分别考了5分、3 分、5分、2分和8分,哎,考得真是惨不忍睹(满分是10分)。

      接下来将分数进行从大到小排序,排序后是85532。你有没有什么好方法编写一段程序,让计算机随机读入5个数

然后将这5个数从大到小输出?

思路:

       定义好一个数组变量a[11]、两个个循环变量 i j 、 计数变量 t

        数组初始化为0

        循环接收输入数据 并把对应的桶的计数加一

        两层for循环

             第一层循环 依次判断a[10] ~a[0]  从大到小输出

              第二层循环 循环次数 等于 出现的次数

                                   就打印几次

代码如下:

#include<stdio.h>
int main()
{
	int a[11],i,j,t;
	for(i=0;i<=10;i++)
		a[i]=0;					 //初始化为0
	for(i=1;i<=5;i++) 		 	 //循环读入5个数
	{
		scanf("%d",&t);			 //把每一个数读到变量t中
		a[t]++;					 //进行计数
	}	
	for(i=10;i>=0;i--) 			 //依次判断a[10]~a[0]
			for(j=1;j<=a[i];j++) //出现了几次就打印几次
				printf("%d",i);
	
	getchar();getchar();    	 //这里的getchar();用来暂停程序,以便查看程序输出的内容
								 //也可以用system("pause");等来代替	
	return 0;
}

        这个排序算法就好比有11个桶,每出现一个数,就在对应的桶里放一个小旗帜,最后算一下桶里面有几个小旗帜就可以了。

        接下来,计算一下这个排序算法—桶排序的时间复杂度,代码第5行循环了m次,代码第7行循环了n次,代码第12行循环了m次,代码第13行循环了n次,所以整个排序循环了m+n+m+n次,时间复杂度:O(m+n+m+n)即O(2*(m+n)),忽略常量,最终桶排序的时间复杂度为:O(m+n),通常用大写表示即:O(M+N)。

        这是简化后易于理解的桶排序,是一个非常快的排序算法,其实这不是真正的桶排序(那会比这个复杂的多),简单易懂的入门排序这是一个非常好的起点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值