zoukankan      html  css  js  c++  java
  • 剑指offer-第二章排序之年龄排序

    题目:对某个公司的人的年龄(0-99)进行排序,该公司的总人数为几万人。要求时间复杂度为O(n),可以辅助O(n)的空间。

    思路:实现函数为void SortAge(int ages[],int len).辅助空间为一个整型数组timesOfAge[100],用来存放每个个年龄的人数(当满足i<len,如果age[i]<=99&&age[i]>=0时候,有timesOfAge[age[i]]++,i++)。用一个嵌套的for对ages[],进行排序。外层用i来代表年龄上限为100,内层用j来代表各年龄的人数,timeOfAge[i]来表示上限。用index代表ages[]数组的下标。执行ages[index++]=i.实现对年龄的排序。

    #include<stdio.h>
    #include<string.h>
    
    /*
    计数排序,员工年龄肯定在0-99之间
    */
    void SortAge(int ages[],int len)
    {
    	if(ages == NULL || len<1)
    		return ;
    	int timesOfAge[100];
    	memset(timesOfAge,0,sizeof(timesOfAge));
    	int i;
    	//计算每个年龄员工的个数
    	for(i=0;i<len;i++)
    	{
    		if(ages[i]<=99 && ages[i]>=0)
    			timesOfAge[ages[i]]++;
    	}
    	//对ages进行排序
    	int index = 0;
    	for(i=0;i<100;i++)
    	{
    		int j = 0;
    		while(j<timesOfAge[i])
    		{
    			ages[index++] = i;
    			j++;
    		}
    	}
    } 
    
    int main()
    {
    	int ages[] = {33,34,45,24,36,23,21,22,19,26,45,34,21,34,34,33,52,22,32,25,27,43,22,21,20,33,26,27,15,29};
    	int len = 30;
    	SortAge(ages,len);
    	int i;
    	for(i=0;i<len;i++)
    		printf("%d ",ages[i]);
    	printf("
    ");
    	return 0;
    }
    
  • 相关阅读:
    队列<一>
    二叉树的遍历[先序,中序,后序]
    The method format(String, Object[]) in the type String is not applicable for the arguments
    sqlserver 备份 与 还原
    sqlserver 无法获得数据库独占权
    page.isvalid
    bzoj3994 [SDOI2015]约数个数和
    bzoj4868 [Shoi2017]期末考试
    bzoj1179 [Apio2009]Atm
    bzoj4869 [Shoi2017]相逢是问候
  • 原文地址:https://www.cnblogs.com/hupp/p/4513122.html
Copyright © 2011-2022 走看看