Sc3ric

insertion + shell

Feb 20th, 2023
536
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. vector<vector<int>> partlyShellSort1(vector<vector<int>> a, Efficiency* eff, int gap) {
  2.     int n = a.size();
  3.     int m = a[0].size();
  4.  
  5.     int start = gap;
  6.  
  7.     for (int k = 0; k < n; k++) {
  8.         for (int i = start; i < m; i++)
  9.         {
  10.             int temp = a[k][i];
  11.             int j;
  12.             //eff->comparisons++;
  13.             for (j = i; (j >= gap); j -= gap)
  14.             {
  15.                 eff->comparisons++;
  16.                 if (a[k][j - gap] >= temp) {
  17.                     break;
  18.                 }
  19.                 a[k][j] = a[k][j - gap];
  20.                 eff->swaps++;
  21.             }
  22.             a[k][j] = temp;
  23.  
  24.         }
  25.     }
  26.  
  27.  
  28.     return a;
  29. }
  30.  
  31. vector<vector<int>> insertSort(vector<vector<int>> a, Efficiency* eff) {
  32.     *eff = Efficiency{ 0,0 };
  33.     return partlyShellSort1(a, eff, 1);
  34. }
  35.  
  36. vector<vector<int>> shellSort(vector<vector<int>> a, Efficiency* eff) {
  37.     *eff = Efficiency{ 0,0 };
  38.  
  39.     int n = a.size();
  40.     int m = a[0].size();
  41.  
  42.     vector<int> gapsM;
  43.  
  44.     for (int i = m / 2; i > 0; i /= 2) {
  45.         gapsM.push_back(i);
  46.     }
  47.  
  48.     for (auto g : gapsM) {
  49.         a = partlyShellSort1(a, eff, g);
  50.     }
  51.  
  52.     return a;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment