Advertisement
Guest User

4

a guest
Apr 19th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. using namespace std;
  5.  
  6. class LinkedList
  7. {
  8. private:
  9.     struct ListItem
  10.     {
  11.         int current;
  12.         ListItem *nextItem, *prevItem;
  13.     };
  14.  
  15.     ListItem *Head, *last;
  16.     int size = 0;
  17.  
  18.     void quickSort(int left, int right)
  19.     {
  20.         int pivot;
  21.         int l_hold = left;
  22.         int r_hold = right;
  23.         pivot = this->get(left);
  24.         while (left < right)
  25.         {
  26.             while ((this->get(right) >= pivot) && (left < right))
  27.                 right--;
  28.             if (left != right)
  29.             {
  30.                 this->get(left) = this->get(right);
  31.                 left++;
  32.             }
  33.             while ((this->get(left) <= pivot) && (left < right))
  34.                 left++;
  35.             if (left != right)
  36.             {
  37.                 this->get(right) = this->get(left);
  38.                 right--;
  39.             }
  40.         }
  41.         this->get(left) = pivot;
  42.         pivot = left;
  43.         left = l_hold;
  44.         right = r_hold;
  45.         if (left < pivot)
  46.             quickSort(left, pivot - 1);
  47.         if (right > pivot)
  48.             quickSort(pivot + 1, right);
  49.     }
  50.  
  51. public:
  52.     ~LinkedList()
  53.     {
  54.         while (Head)
  55.         {
  56.             last = Head->nextItem;
  57.             delete Head;
  58.             Head = last;
  59.         }
  60.     }
  61.  
  62.     int& get(int x) {
  63.         if (x < size) {
  64.             int *value;
  65.             ListItem *item = Head;
  66.             for (int i = 0; i < x; ++i) {
  67.                 item = item->nextItem;
  68.             }
  69.             return item->current;
  70.         }
  71.         else {
  72.             throw "Out of range";
  73.         }
  74.     }
  75.    
  76.     void add(int x)
  77.     {
  78.         size++;
  79.         ListItem *temp = new ListItem;
  80.         temp->nextItem = NULL;
  81.         temp->current = x;
  82.  
  83.         if (Head != NULL)
  84.         {
  85.             temp->prevItem = last;
  86.             last->nextItem = temp;
  87.             last = temp;
  88.         }
  89.         else
  90.         {
  91.             temp->prevItem = NULL;
  92.             Head = last = temp;
  93.         }
  94.     }
  95.  
  96.     void show()
  97.     {
  98.         ListItem *temp = last;
  99.  
  100.         while (temp != NULL)
  101.         {
  102.             temp = Head;
  103.             while (temp != NULL)
  104.             {
  105.                 cout << temp->current << " ";
  106.                 temp = temp->nextItem;
  107.             }
  108.             cout << "\n";
  109.         }
  110.     }
  111.  
  112.     void quickSorting() {
  113.         if (size > 1)
  114.             quickSort(0, size - 1);
  115.     }
  116. };
  117.  
  118. LinkedList *getRandomList(int size) {
  119.     LinkedList *list = new LinkedList();
  120.     for (int i = 0; i < size; ++i) {
  121.         list->add(rand());
  122.     }
  123.     return list;
  124. }
  125.  
  126. LinkedList *getAlmostRandomList(int size) {
  127.     LinkedList *list = new LinkedList();
  128.     int pivot = rand() % (size - 1);
  129.     for (int i = 0; i < pivot; ++i) {
  130.         list->add(rand());
  131.     }
  132.     list->quickSorting();
  133.     for (int i = pivot; i < size; i++) {
  134.         list->add(rand());
  135.     }
  136.     return list;
  137. }
  138.  
  139. LinkedList *getReverseList(int size) {
  140.     LinkedList *list = new LinkedList();
  141.     for (int i = 0; i < size; ++i) {
  142.         list->add(rand());
  143.     }
  144.     list->quickSorting();
  145.  
  146.     LinkedList *reverseList = new LinkedList();
  147.     for (int i = size - 1; i >= 0; --i) {
  148.         reverseList->add(list->get(i));
  149.     }
  150.  
  151.     return reverseList;
  152. }
  153.  
  154. int* getRandomTimes() {
  155.     int *times = new int[3];
  156.     LinkedList *list;
  157.  
  158.     list = getRandomList(1000);
  159.     int startTime = clock();
  160.     list->quickSorting();
  161.     int endTime = clock();
  162.     times[0] = endTime - startTime;
  163.  
  164.     list = getRandomList(5000);
  165.     startTime = clock();
  166.     list->quickSorting();
  167.     endTime = clock();
  168.     times[1] = endTime - startTime;
  169.  
  170.     list = getRandomList(10000);
  171.     startTime = clock();
  172.     list->quickSorting();
  173.     endTime = clock();
  174.     times[2] = endTime - startTime;
  175.  
  176.     return times;
  177. }
  178.  
  179. int* getAlmostTimes() {
  180.     int *times = new int[3];
  181.     LinkedList *list;
  182.  
  183.     list = getAlmostRandomList(1000);
  184.     int startTime = clock();
  185.     list->quickSorting();
  186.     int endTime = clock();
  187.     times[0] = endTime - startTime;
  188.  
  189.     list = getAlmostRandomList(5000);
  190.     startTime = clock();
  191.     list->quickSorting();
  192.     endTime = clock();
  193.     times[1] = endTime - startTime;
  194.  
  195.     list = getAlmostRandomList(10000);
  196.     startTime = clock();
  197.     list->quickSorting();
  198.     endTime = clock();
  199.     times[2] = endTime - startTime;
  200.  
  201.     return times;
  202. }
  203.  
  204. int* getReverseTimes() {
  205.     int *times = new int[3];
  206.     LinkedList *list;
  207.  
  208.     list = getReverseList(1000);
  209.     int startTime = clock();
  210.     list->quickSorting();
  211.     int endTime = clock();
  212.     times[0] = endTime - startTime;
  213.  
  214.     list = getReverseList(5000);
  215.     startTime = clock();
  216.     list->quickSorting();
  217.     endTime = clock();
  218.     times[1] = endTime - startTime;
  219.  
  220.     list = getReverseList(10000);
  221.     startTime = clock();
  222.     list->quickSorting();
  223.     endTime = clock();
  224.     times[2] = endTime - startTime;
  225.  
  226.     return times;
  227. }
  228.  
  229. void printTimes(int *times) {
  230.     cout << "1000 items  --> " << times[0] << "ms" << endl;
  231.     cout << "5000 items  --> " << times[1] << "ms" << endl;
  232.     cout << "10000 items --> " << times[2] << "ms" << endl;
  233. }
  234.  
  235. int main() {
  236.     int *times = getRandomTimes();
  237.     cout << "<--Random sort-->" << endl;
  238.     printTimes(times);
  239.     cout << endl;
  240.  
  241.     times = getAlmostTimes();
  242.     cout << "<--Almost random sort-->" << endl;
  243.     printTimes(times);
  244.     cout << endl;
  245.  
  246.     times = getReverseTimes();
  247.     cout << "<--Reverse sort-->" << endl;
  248.     printTimes(times);
  249.     cout << endl;
  250.  
  251.     delete times;
  252.     system("pause");
  253.     return 0;
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement