Advertisement
Guest User

Untitled

a guest
Jun 20th, 2024
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. std::vector<long long> radix_sort_linked_list_arr(std::vector<long long>& arr, long long size) {
  2.     auto first = new long long[size];
  3.     auto last = new long long[size];
  4.     auto next = new long long[size];
  5.     std::fill(first, first + size, -1);
  6.     std::fill(last, last + size, -1);
  7.     std::fill(next, next + size, -1);
  8.  
  9.     // Sort by x % size
  10.     for (long long i = 0; i < size; ++i) {
  11.         long long r = arr[i] % size;
  12.         if (first[r] == -1) {
  13.             first[r] = i;
  14.         } else {
  15.             next[last[r]] = i;
  16.         }
  17.         last[r] = i;
  18.     }
  19.  
  20.     // Sort by x / size
  21.     auto First = new long long[size];
  22.     auto Last = new long long[size];
  23.     auto Next = new long long[size];
  24.     std::fill(First, First + size, -1);
  25.     std::fill(Last, Last + size, -1);
  26.     std::fill(Next, Next + size, -1);
  27.  
  28.     for (long long r = 0; r < size; ++r) {
  29.         long long i = first[r];
  30.         while (i != -1) {
  31.             long long x = arr[i];
  32.             long long q = x / size;
  33.             if (First[q] == -1) {
  34.                 First[q] = i;
  35.             } else {
  36.                 Next[Last[q]] = i;
  37.             }
  38.             Last[q] = i;
  39.             i = next[i];
  40.         }
  41.     }
  42.  
  43.     // Output
  44.     std::vector<long long> output(size);
  45.     int curr_idx = 0;
  46.     for (long long q = 0; q < size; ++q) {
  47.         long long i = First[q];
  48.         while (i != -1) {
  49.             output[curr_idx++] = arr[i];
  50.             i = Next[i];
  51.         }
  52.     }
  53.  
  54.     delete[] first;
  55.     delete[] last;
  56.     delete[] next;
  57.     delete[] First;
  58.     delete[] Last;
  59.     delete[] Next;
  60.    
  61.     return output;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement