Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. uint64_t get_byte(size_t num, int ord_num, int bytes_to_take){
  2.     return ((unsigned long long)num << ((sizeof (num) - bytes_to_take - ord_num * bytes_to_take) * 8)) >> (sizeof (num) * 8 - 8 * bytes_to_take);
  3. }
  4.  
  5. void Radix_sort(uint64_t Temp[], int length, int bytes_to_take) {
  6.      int cnt_bytes = sizeof (Temp[0]) / bytes_to_take;
  7.      //std::cout << " bytes " << cnt_bytes << "\n";
  8.      int cnt = pow(2, bytes_to_take * 8);
  9.      uint64_t* Temp2 = new uint64_t[length];
  10.      for (int byte = 0; byte < cnt_bytes; ++byte) {
  11.          std::vector<int> byte_var(cnt,0);
  12.          //std::cout << "byte_num: " << byte << "\n";
  13.          for (int iter = 0; iter < length; ++iter) {
  14.              byte_var[get_byte(Temp[iter], byte, bytes_to_take)]++;
  15.              //std::cout << get_byte(Temp[iter], byte, bytes_to_take) << " " << Temp[iter] << "\n";
  16.          }
  17.  
  18.          int count = 0;
  19.          int temp;
  20.          for (int iter = 0; iter < cnt; ++iter) {
  21.              temp = byte_var[ iter ];
  22.              byte_var[ iter ] = count;
  23.              count += temp;
  24.          }
  25.          //std::cout<<"swaped\n";
  26.          for (int iter = 0; iter < length; ++iter) {
  27.              temp = get_byte(Temp[ iter ], byte, bytes_to_take);
  28.              Temp2[byte_var[temp]] = Temp[ iter ];
  29.              byte_var[ temp ]++;
  30.          }
  31.          std::swap(Temp, Temp2);
  32.          //std::cout<<"swaped\n";
  33.      }
  34.      return;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement