员工年龄排序算法

44 篇文章 0 订阅
43 篇文章 0 订阅


//对公司几万员工年龄排序
#include "vector"
#include "iostream"
using namespace std;

void arrayPrint(int a[], int N)
{
	for (int i = 0; i < N; i++)
		cout << a[i] << " ";
	cout << endl;
}

void sortAges0(int ages[], int length)
{
	vector<vector<int> > bucket(100, vector<int>());
	for (int i = 0; i < length; i++)
	{
		bucket[ages[i]].push_back(ages[i]);
	}
	int count = 0;
	for (size_t i = 0; i < 100; i++)
	{
		for (size_t j = 0; j < bucket[i].size(); j++)
			ages[count++] = bucket[i][j];
	}
}

void sortAges1(int ages[], int length)
{
	int bucket[100] = { 0 };
	for (int i = 0; i < length; i++)
	{
		bucket[ages[i]]++;
	}
	int count = 0;
	for (int i = 0; i < 100; i++)
	{
		while (bucket[i] > 0)
		{
			ages[count++] = i;
			bucket[i]--;
		}
	}
}

#include "map"
void sortAges2(int ages[], int length)
{
	map<int, int> bucket;
	for (int i = 0; i < length; i++)
	{
		bucket[ages[i]]++;
	}
	int count = 0;
	for (map<int, int>:: iterator iter = bucket.begin(); iter != bucket.end(); iter++)
	{
		while (iter->second > 0)
		{
			ages[count++] = iter->first;
			iter->second--;
		}
	}
}

#include "random"
#include "ctime"
#include "fstream"

#define N 100
void test()
{
	int ages[N] = { 0 };

	ofstream file;
	file.open("result.txt", ios::app);

	clock_t t0 = clock();
	for (int j = 0; j < 10; j++)
	{
		default_random_engine generator;
		uniform_int_distribution<int> distribution(20, 60);
		for (int i = 0; i < N; i++)
		{
			ages[i] = distribution(generator);
		}
		sortAges0(ages, N);
		arrayPrint(ages, N);
	}
	file << "sortAage0: " << clock() - t0 << "ms" << endl;

	t0 = clock();
	for (int j = 0; j < 10; j++)
	{
		default_random_engine generator;
		uniform_int_distribution<int> distribution(20, 60);
		for (int i = 0; i < N; i++)
		{
			ages[i] = distribution(generator);
		}
		sortAges1(ages, N);
		arrayPrint(ages, N);
	}
	file << "sortAage1: " << clock() - t0 << "ms" << endl;

	t0 = clock();
	for (int j = 0; j < 10; j++)
	{
		default_random_engine generator;
		uniform_int_distribution<int> distribution(20, 60);
		for (int i = 0; i < N; i++)
		{
			ages[i] = distribution(generator);
		}
		sortAges2(ages, N);
		arrayPrint(ages, N);
	}
	file << "sortAage2: " << clock() - t0 << "ms" << endl;
	file.close();
}

int main()
{
	test();
	return 0;
}

三次运行时间结果:

sortAage0: 176ms
sortAage1: 160ms
sortAage2: 142ms

sortAage0: 160ms
sortAage1: 139ms
sortAage2: 141ms

sortAage0: 148ms
sortAage1: 137ms
sortAage2: 142ms


可以看到,第二和第三时间差不多,只是map建树稍微要麻烦一点,内存方面细算也没有特别的优势。

第一种方法内存O(n)时间也慢。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你可以使用结构体存储员工信息,然后使用快速排序或其他排序算法按照年龄从小到大的顺序对员工信息进行排序。 以下是一个简单的示例代码: ```c++ #include <iostream> #include <algorithm> using namespace std; struct Employee { string name; int age; int id; }; bool cmp(Employee a, Employee b) { return a.age < b.age; // 按照年龄从小到大排序 } int main() { Employee employees[5] = {{"Tom", 25, 1001}, {"Jerry", 30, 1002}, {"Alice", 22, 1003}, {"Bob", 28, 1004}, {"Eva", 35, 1005}}; // 排序前的员工信息 cout << "排序前的员工信息:" << endl; for(int i=0; i<5; i++) { cout << "姓名:" << employees[i].name << ",年龄:" << employees[i].age << ",ID:" << employees[i].id << endl; } // 对员工信息按照年龄排序 sort(employees, employees+5, cmp); // 排序后的员工信息 cout << "排序后的员工信息:" << endl; for(int i=0; i<5; i++) { cout << "姓名:" << employees[i].name << ",年龄:" << employees[i].age << ",ID:" << employees[i].id << endl; } return 0; } ``` 输出结果为: ``` 排序前的员工信息: 姓名:Tom,年龄:25,ID:1001 姓名:Jerry,年龄:30,ID:1002 姓名:Alice,年龄:22,ID:1003 姓名:Bob,年龄:28,ID:1004 姓名:Eva,年龄:35,ID:1005 排序后的员工信息: 姓名:Alice,年龄:22,ID:1003 姓名:Tom,年龄:25,ID:1001 姓名:Bob,年龄:28,ID:1004 姓名:Jerry,年龄:30,ID:1002 姓名:Eva,年龄:35,ID:1005 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值