剑指offer-第二章排序之年龄排序
2015-05-18 21:28
106 查看
题目:对某个公司的人的年龄(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.实现对年龄的排序。
思路:实现函数为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("\n"); return 0; }
相关文章推荐
- 《剑指offer》---两个队列来实现栈 和 O(n)时间内对年龄排序
- 剑指offer—第二章算法之快速排序
- 剑指offer 对公司上万名员工按照年龄排序
- 剑指offer--快速排序递归实现,年龄排序O(N)实现,旋转数组最小值查找
- 《剑指Offer》面试题:员工的年龄进行排序
- Java 使用TreeMap对学生对象的年龄进行升序排序。
- 合并两个排序的链表(剑指offer)
- OC字典存入数组,输出数组中数据,并且删除小明一项,然后进行排序、现根据班级排序,班级相同的用年龄进行排序
- 剑指Offer——数字在排序数组中出现的次数
- 《剑指offer》-合并两个排序的链表
- NYOJ 1080 年龄排序(计数排序)
- 剑指offer——数字在排序数组中出现的次数
- 题目1374:所有员工年龄排序
- 剑指offer——年龄排序问题
- 《剑指offer》——合并两个排序的链表
- 《剑指offer》刷题笔记(知识迁移能力):数字在排序数组中出现的次数
- 剑指:年龄排序
- 算法导论实验:第二章插入排序 P10
- 剑指offer——面试题17:合并两个排序的链表
- PAT (Advanced Level) 1055. The World's Richest (25) 年龄区间内最有钱的人,结构体排序