Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. #include "ReadWriter.h"
  2. //iostream, fstream включены в ReadWriter.h
  3. using namespace std;
  4.  
  5. union un
  6. {
  7. unsigned int numb;
  8. unsigned char int_in_char[4];
  9. };
  10.  
  11.  
  12. int findMax(un *numbers, int index, int array_size)
  13. {
  14. int max = numbers[0].int_in_char[index];
  15. for (int i = 1; i < array_size; ++i)
  16. {
  17. if (numbers[i].int_in_char[index] > max) max = numbers[i].int_in_char[index];
  18. }
  19. return max;
  20. }
  21.  
  22. void initialize_by_zeros(int *tmp, int size)
  23. {
  24. for (int i = 0; i < size; ++i)
  25. {
  26. tmp[i] = 0;
  27. }
  28. }
  29.  
  30.  
  31. // Функция цифровой сортировки
  32. void radixSort(int *numbers, int array_size)
  33. {
  34. un *_un = new un[array_size];
  35. for (int l = 0; l < array_size; ++l)
  36. {
  37. _un[l].numb = numbers[l];
  38. }
  39.  
  40. for (int i = 0; i < 4; ++i)
  41. {
  42. int max = (findMax(_un, i, array_size) + 1);
  43. int help_array[max];
  44. initialize_by_zeros(help_array, max);
  45.  
  46. for (int j = 0; j < array_size; ++j)
  47. {
  48. ++help_array[_un[j].int_in_char[i]];
  49. }
  50.  
  51. for (int j = 1; j < max; ++j)
  52. {
  53. help_array[j] += help_array[j - 1];
  54. }
  55.  
  56. for (int k = array_size - 1; k >= 0; --k)
  57. {
  58. numbers[--help_array[_un[k].int_in_char[i]]] = _un[k].numb;
  59. }
  60.  
  61. for (int l = 0; l < array_size; ++l)
  62. {
  63. _un[l].numb = numbers[l];
  64. }
  65.  
  66. }
  67. delete [] _un;
  68.  
  69. }
  70.  
  71. //Не удалять и не изменять метод main без крайней необходимости.
  72. //Необходимо добавить комментарии, если все же пришлось изменить метод main.
  73. int main()
  74. {
  75. //Объект для работы с файлами
  76. ReadWriter rw;
  77.  
  78. int *brr = nullptr;
  79. int n;
  80.  
  81. //Ввод из файла
  82. n = rw.readInt();
  83.  
  84. brr = new int[n];
  85. rw.readArray(brr, n);
  86.  
  87. //Запуск сортировки, ответ в том же массиве (brr)
  88. radixSort(brr, n);
  89.  
  90. //Запись в файл
  91. rw.writeArray(brr, n);
  92.  
  93. //освобождаем память
  94. delete[] brr;
  95.  
  96. return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement