Advertisement
belkin1667

Untitled

Jul 4th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. union X {
  2. unsigned int number;
  3. unsigned char bytes[4];
  4. };
  5.  
  6. void counting_sort_union(X *numbers, int length, int byte_number) {
  7. char *arr = new char[length];
  8. for (int i = 0; i < length; ++i) {
  9. arr[i] = numbers[i].bytes[byte_number];
  10. }
  11. int t = 256;
  12. int *c = new int[t];
  13. for (int i = 0; i < t; ++i) {
  14. c[i] = 0;
  15. }
  16.  
  17. for (int j = 0; j < length; ++j) {
  18. c[arr[j]]++;
  19. }
  20.  
  21. for (int i = 1; i < t; ++i) {
  22. c[i] += c[i - 1];
  23. }
  24.  
  25. X *output = new X[length];
  26.  
  27. for (int i = length - 1; i >= 0; --i) {
  28. c[arr[i]]--;
  29. output[c[arr[i]]] = numbers[i];
  30.  
  31. }
  32. for (int l = 0; l < length; ++l) {
  33. numbers[l] = output[l];
  34. }
  35.  
  36. delete[] arr;
  37. delete[] output;
  38. delete[] c;
  39. }
  40.  
  41. void radix_sort(int *arr, int length) {
  42. X *numbers = new X[length];
  43.  
  44. for (int i = 0; i < length; ++i) {
  45. numbers[i].number = arr[i];
  46. }
  47. for (int j = 0; j < 4; ++j) {
  48. counting_sort_union(numbers, length, j, k);
  49. }
  50. for (int i = 0; i < length; ++i) {
  51. arr[i] = numbers[i].number;
  52. }
  53. delete[] numbers;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement