算法-面试题2万多名员工按年龄排序

来源:互联网 发布:创业软件 复牌 编辑:程序博客网 时间:2024/05/16 04:57

2万多名员工按年龄排序算法,

算法思想是选择排序算法的思想,同时考虑到2万多员工,在某个年龄取值时会有多位员工的实际情况。

思路
第一遍搜索找出,最小年龄为m个minAge, 最大年龄为n个maxAge,这样得到年龄的取值区间[minAge, maxAge]; 第二遍,搜索步进1,全部找出后,放到m个minAge后,依次。。。

C#代码实现,

人员模型为,

public class Person{   public Person(int staffno, int age)   {     this.staffno = staffno;     this.age = age;   }   //工号   public int staffno {get;set;}   //年龄   public int age{get;set;}  }

步进为1的排序搜索算法:

        static void sort()        {            if (list == null) return;            //找出人员年龄最小的list            List<Person> minAgePersons = GetAgePersons(list.Min(per => per.age));            //找出人员年龄最大的list            List<Person> maxAgePersons = GetAgePersons(list.Max(per => per.age));           //去掉这些最值            list = list.Except(minAgePersons).Except(maxAgePersons).ToList();            for(int age = minAgePersons[0].age+1;age<maxAgePersons[0].age;age++)            {                List<Person> agePersons = GetAgePersons(age);                minAgePersons.AddRange(agePersons);                list.Except(agePersons);            }            minAgePersons.AddRange(maxAgePersons);            list = minAgePersons;        }        static List<Person> GetAgePersons(int age)        {            return list.FindAll(person => person.age == age);        }

人员年龄不一定步进为1,所以改进sort()之,

        static void sort()        {            if (list == null) return;            //找出人员年龄最小的list            List<Person> minAgePersons = GetAgePersons(list.Min(per => per.age));            list = list.Except(minAgePersons).ToList();            do            {                                List<Person> tmpminAgePersons = GetAgePersons(list.Min(per => per.age));                minAgePersons.AddRange(tmpminAgePersons);                list = list.Except(tmpminAgePersons).ToList();            } while (list.Count > 0);            list = minAgePersons;        }

源码地址:
下载后,list = list.Except(minAgePersons).ToList()移动到do循环外。(上传代码后才发现的一个小问题)
http://download.csdn.net/detail/daigualu/9782742

2 0
原创粉丝点击