Advertisement
Sailein

Untitled

Oct 8th, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.18 KB | None | 0 0
  1. struct SortResult
  2. {
  3.     Array sortedArray;
  4.     int compareCount;
  5.     int swapCount;
  6.     int timeSort;
  7.     SortResult (Array sortedArray = Array(), int compareCount = 0, int swapCount = 0, int timeSort = 0)
  8.             : sortedArray(sortedArray), compareCount(compareCount), swapCount(swapCount), timeSort(timeSort) {};
  9.     SortResult (const SortResult& o)
  10.             : sortedArray(o.sortedArray), compareCount(o.compareCount), swapCount(o.swapCount), timeSort(o.timeSort) {};
  11. };
  12. class Sort
  13. {
  14. public:
  15.     virtual SortResult sort(const Array& inputArray) {return SortResult();}
  16. };
  17.  
  18. class ShellSort : public Sort
  19. {
  20. public:
  21.     virtual SortResult sort(const Array& inputArray)
  22.     {
  23.         SortResult res = SortResult(inputArray);
  24.         Array& array = res.sortedArray;
  25.         clock_t t = clock();
  26.         for (int step = array.size() / 2; step > 0; step /= 2)
  27.             for (int i = step; i < array.size(); i++)
  28.             {
  29.                 int tmp = array[i];
  30.                 int j = i;
  31.                 for (; j >= step; j -= step)
  32.                 {
  33.                     res.compareCount++;
  34.                     if (tmp < array[j - step])
  35.                     {
  36.                         array[j] = array[j - step];
  37.                         res.swapCount++;
  38.                     }
  39.                     else
  40.                         break;
  41.                 }
  42.                 array[j] = tmp;
  43.             }
  44.         res.timeSort = clock() - t;
  45.         return res;
  46.     }
  47. };
  48.  
  49. class BubbleSort : public Sort
  50. {
  51. public:
  52.     virtual SortResult sort (const Array& inputArray)
  53.     {
  54.         SortResult res = SortResult(inputArray);
  55.         Array& array = res.sortedArray;
  56.         clock_t t = clock();
  57.         int flag;
  58.         int tmp;
  59.         do
  60.         {
  61.             flag = 0;
  62.             for(int i = 0; i < array.size() - 1; i++)
  63.             {
  64.                 res.compareCount++;
  65.                 if(array[i] > array[i + 1])
  66.                 {
  67.                     flag = 1;
  68.                     tmp = array[i];
  69.                     array[i] = array[i + 1];
  70.                     array[i + 1]= tmp;
  71.                     res.swapCount++;
  72.                 }
  73.             }
  74.         }
  75.         while(flag);
  76.         res.timeSort = clock() - t;
  77.         return res;
  78.     }
  79. };
  80.  
  81. class SelectSort : public Sort
  82. {
  83. public:
  84.     virtual SortResult sort (const Array& inputArray)
  85.     {
  86.         SortResult res = SortResult(inputArray);
  87.         Array& array = res.sortedArray;
  88.         clock_t t = clock();
  89.         for(int i = 0; i < array.size(); i++)
  90.         {
  91.             int k = i;
  92.             for(int j=i+1; j < array.size(); j++) // цикл выбора наименьшего элемента
  93.             {
  94.                 res.compareCount++;
  95.                 if (  array[j] < array[k] )
  96.                 {
  97.                     k = j; // k - индекс наименьшего элемента
  98.                 }
  99.             }
  100.             int tmp = array[k];
  101.             array[k] = array[i];
  102.             array[i] = tmp; // меняем местами наименьший с a[i]
  103.             res.swapCount++;
  104.         }
  105.         res.timeSort = clock() - t;
  106.         return res;
  107.     }
  108. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement