Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. #include "ReadWriter.h"
  2. //iostream, fstream включены в ReadWriter.h
  3. using namespace std;
  4. union NS {
  5. int number;
  6. unsigned char digits[4];
  7. };
  8.  
  9. // Функция цифровой сортировки
  10. void radixSort(int *numbers, int array_size) {
  11. NS *newNumbers = new NS[array_size];
  12. for (int i = 0; i < array_size; ++i) {
  13. newNumbers[i].number = numbers[i];
  14. }
  15. unsigned int base = 256;
  16. unsigned int counter[base];
  17. for (int i = 0; i < 4; ++i) {
  18. for (int j = 0; j < base; ++j) {
  19. counter[j] = 0;
  20. }
  21. for (int j = 0; j < array_size; ++j) {
  22. counter[newNumbers[j].digits[i]]++;
  23. }
  24. for (int j = 1; j < base; ++j) {
  25. counter[j] += counter[j - 1];
  26. }
  27. for (int j = array_size - 1; j >= 0; --j) {
  28. numbers[counter[newNumbers[j].digits[i]] - 1] = newNumbers[j].number;
  29. counter[newNumbers[j].digits[i]]--;
  30. }
  31. for (int j = 0; j < array_size; ++j) {
  32. newNumbers[j].number = numbers[j];
  33. }
  34. }
  35. delete[] newNumbers;
  36. }
  37.  
  38. //Не удалять и не изменять метод main без крайней необходимости.
  39. //Необходимо добавить комментарии, если все же пришлось изменить метод main.
  40. int main() {
  41. //Объект для работы с файлами
  42. // std::fstream fout;
  43. // fout.open("input.txt", std::ios::out);
  44. // fout << "256" << endl;
  45. // for (int i = 0; i < 256; ++i) {
  46. // fout << rand() % 10000 << " ";
  47. // }
  48. // fout.close();
  49. ReadWriter rw;
  50. int *brr = nullptr;
  51. int n;
  52.  
  53. //Ввод из файла
  54. n = rw.readInt();
  55.  
  56. brr = new int[n];
  57. rw.readArray(brr, n);
  58.  
  59. //Запуск сортировки, ответ в том же массиве (brr)
  60. radixSort(brr, n);
  61.  
  62. //Запись в файл
  63. rw.writeArray(brr, n);
  64.  
  65. //освобождаем память
  66. delete[] brr;
  67.  
  68. return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement