Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <vector>
- #include <algorithm>
- #include <iomanip>
- #include <math.h>
- //По дате рождения с помощью сортировки блочной сортировки (Bucket sort).
- using namespace std;
- //В файле содержатся данные о сотрудниках предприятия: ФИО, должность,
- //дата рождения, стаж работы, зарплата (не менее 20 человек). В новый файл вывести
- //данные, отсортированные по какому-либо ключу
- struct worker
- {
- string surname;
- string name;
- string patronymic;
- string position;
- string birth_date;
- string exp;
- string salary;
- int bdate;
- };
- int cuteDate(string date)//convert string-format date to int (12.05.2012 -> 20120512)
- {
- int day = atoi(date.substr(0, 2).c_str());
- int month = atoi(date.substr(3, 2).c_str());
- int year = atoi(date.substr(6, 4).c_str());
- return year * 10000 + month * 100 + day;
- }
- void minmax(vector<worker> &vec, int &mn, int &mx)//find max and min for setting the bucket vector's dimension
- {
- for(int i = 0; i < vec.size(); i++)
- {
- int cur = cuteDate(vec[i].birth_date);
- vec[i].bdate = cur;
- mx = max(mx, cur);
- mn = min(mn, cur);
- }
- }
- void bucketSort(vector<worker> &vec, vector<vector<worker>> &bucket, int mn, int mx)
- {
- for(int i = 0; i < vec.size(); i++)
- {
- bucket[vec[i].bdate - mn].push_back(vec[i]);
- }
- }
- int main()
- {
- ifstream in("in.txt");
- ofstream out("out.txt");
- vector<worker> vec;
- while(in.peek() != EOF)
- {
- worker result;
- in >> result.surname >> result.name >> result.patronymic >> result.position >> result.birth_date >> result.exp >> result.salary;
- vec.push_back(result);
- }
- int mx = 0;
- int mn = 300000000;
- minmax(vec, mn, mx);
- vector<vector<worker>> bucket(mx - mn + 1, vector <worker>());
- bucketSort(vec, bucket, mn, mx);
- for(int i = 0; i < bucket.size(); i++)
- {
- for(int j = 0; j < bucket[i].size(); j++)
- {
- out << left << setw(20) << bucket[i][j].surname << setw(20) << bucket[i][j].name << setw(20) << bucket[i][j].patronymic << setw(20) << bucket[i][j].position << setw(20) << bucket[i][j].birth_date << setw(20) << bucket[i][j].exp << setw(20) << bucket[i][j].salary << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement