算法之桶排序(C语言)

                                                               桶排序

Q:
小哼班上五个同学分别考了5分、3分、5分、2分和8分(满分为10分),随机读入,从大到小输出。
A:
因为满分为10分,所以
申请一个大小为11的数组 int a[11],从a[0]~a[10]都为零,表示还没有人得过,处理分数时,第一个人的分数是5,就将a[5]的数值加一,以此类推。然后将计入的数据打印,数值为几就打印几次。
Code:

#include <stdio.h>
void main()
{
    int a[11],i,j,t;
    for(i=0;i<=10;i++)
	{
		a[i]=0;//初始化为0
	}
	for(i=0;i<=5;i++)//循环读入5个数
	{
		scanf("%d",&t);//把每一个数读到变量t中
		a[t++];//进行计数
	}
	for(i=0;i<=10;i++)//依次判断a[0]~a[10]
	{
		for(j=1;j<=a[i];j++)//出现了几次就打印几次
		{
			printf("%d",i);
		}
	}
}

时间复杂度:
设m为桶的个数,n为待排序数的个数,整个排序算法一共执行了m+n+m+n次,即O(2*(m+n)),忽略常数,以及用大写字母表示为:O(M+N),速度快,但是浪费空间!而且,分数无法对应上人。解决法——下一节,冒泡排序。

    原文作者:排序算法
    原文地址: https://blog.csdn.net/tx_far/article/details/80823082
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞