Advertisement
kokokozhina

Untitled

Mar 1st, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <iomanip>
  7. #include <math.h>
  8. //По дате рождения с помощью сортировки блочной сортировки (Bucket sort).
  9. using namespace std;
  10. //В файле содержатся данные о сотрудниках предприятия: ФИО, должность,
  11. //дата рождения, стаж работы, зарплата (не менее 20 человек). В новый файл вывести
  12. //данные, отсортированные по какому-либо ключу
  13.  
  14. struct worker
  15. {
  16. string surname;
  17. string name;
  18. string patronymic;
  19. string position;
  20. string birth_date;
  21. string exp;
  22. string salary;
  23. int bdate;
  24. };
  25.  
  26. int cuteDate(string date)//convert string-format date to int (12.05.2012 -> 20120512)
  27. {
  28. int day = atoi(date.substr(0, 2).c_str());
  29. int month = atoi(date.substr(3, 2).c_str());
  30. int year = atoi(date.substr(6, 4).c_str());
  31. return year * 10000 + month * 100 + day;
  32. }
  33.  
  34. void minmax(vector<worker> &vec, int &mn, int &mx)//find max and min for setting the bucket vector's dimension
  35. {
  36. for(int i = 0; i < vec.size(); i++)
  37. {
  38. int cur = cuteDate(vec[i].birth_date);
  39. vec[i].bdate = cur;
  40. mx = max(mx, cur);
  41. mn = min(mn, cur);
  42. }
  43. }
  44.  
  45. void bucketSort(vector<worker> &vec, vector<vector<worker>> &bucket, int mn, int mx)
  46. {
  47. for(int i = 0; i < vec.size(); i++)
  48. {
  49. bucket[vec[i].bdate - mn].push_back(vec[i]);
  50. }
  51. }
  52.  
  53. int main()
  54. {
  55. ifstream in("in.txt");
  56. ofstream out("out.txt");
  57. vector<worker> vec;
  58. while(in.peek() != EOF)
  59. {
  60. worker result;
  61. in >> result.surname >> result.name >> result.patronymic >> result.position >> result.birth_date >> result.exp >> result.salary;
  62. vec.push_back(result);
  63. }
  64.  
  65. int mx = 0;
  66. int mn = 300000000;
  67.  
  68. minmax(vec, mn, mx);
  69. vector<vector<worker>> bucket(mx - mn + 1, vector <worker>());
  70. bucketSort(vec, bucket, mn, mx);
  71.  
  72. for(int i = 0; i < bucket.size(); i++)
  73. {
  74. for(int j = 0; j < bucket[i].size(); j++)
  75. {
  76. 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;
  77. }
  78. }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement