Advertisement
Koragg

Algorithms (Array Sorts)

Nov 24th, 2018
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.14 KB | None | 0 0
  1. ////////////////////////////////
  2. // Input/Output via .bat file //
  3. ////////////////////////////////
  4. releaseFile.exe <in.txt >out.txt
  5. pause
  6.  
  7. /////////////////////////////
  8. // Generate Random Numbers //
  9. /////////////////////////////
  10. #include <time.h>
  11. #include <iostream>
  12. using namespace std;
  13.  
  14. int main(){
  15.     int n, m = 30000;
  16.     srand((unsigned)time(NULL));
  17.     cin >> n;
  18.     cout << n << endl;;
  19.     for (int i = 1; i <= n; i++) {
  20.         cout << rand() % m + 1 << endl;
  21.     }
  22. }
  23.  
  24. /////////////////
  25. // Bubble Sort //
  26. /////////////////
  27. void bubbleSort(int arr[], int n) {
  28.     for (int i = 0; i < n - 1; i++) {
  29.         for (int j = 0; j < n - i - 1; j++) {
  30.             if (arr[j] > arr[j + 1]) {
  31.                 swap(&arr[j], &arr[j + 1]);
  32.             }
  33.         }
  34.     }
  35. }
  36.  
  37. void swap(int *xp, int *yp) {
  38.     int temp = *xp;
  39.     *xp = *yp;
  40.     *yp = temp;
  41. }
  42.  
  43. ////////////////
  44. // Quick Sort //
  45. ////////////////
  46. void quickSort(int arr[], int li, int di) {
  47.     int j = li;
  48.     int k = di;
  49.     int middle = (li + di) / 2;
  50.     int temp;
  51.  
  52.     while (arr[j] < arr[middle]) {
  53.         j++;
  54.     }
  55.  
  56.     while (arr[k] > arr[middle]) {
  57.         k--;
  58.     }
  59.  
  60.     if (j <= k) {
  61.         temp = arr[j];
  62.         arr[j] = arr[k];
  63.         arr[k] = temp;
  64.         j++;
  65.         k--;
  66.     }
  67.  
  68.     if (j < di) {
  69.         quickSort(arr, j, di);
  70.     }
  71.  
  72.     if (li < k) {
  73.         quickSort(arr, li, k);
  74.     }
  75. }
  76.  
  77. ////////////////////
  78. // Insertion Sort //
  79. ////////////////////
  80. void insertionSort(int arr[], int n) {
  81.     int i, key, j;
  82.     for (i = 1; i < n; i++) {
  83.         key = arr[i];
  84.         j = i - 1;
  85.  
  86.         while (j >= 0 && arr[j] > key) {
  87.             arr[j + 1] = arr[j];
  88.             j = j - 1;
  89.         }
  90.         arr[j + 1] = key;
  91.     }
  92. }
  93.  
  94. ////////////////////
  95. // Selection Sort //
  96. ////////////////////
  97. void selectionSort(int &arr[], int n){
  98.     for (int i = 0; i < n; ++i){
  99.         int min = i;
  100.         for (int j = i; j < n; ++j){
  101.             if (array[min] > array[j]){
  102.                 min = j;
  103.             }
  104.         }
  105.         int tmp = array[i];
  106.         array[i] = array[min]
  107.         array[min] = tmp;
  108.     }
  109. }
  110.  
  111. ///////////////
  112. // Heap Sort //
  113. ///////////////
  114. void heapify(int arr[], int n, int i) {
  115.     int largest = i;
  116.     int l = 2 * i + 1;
  117.     int r = 2 * i + 2;
  118.    
  119.     if (l < n && arr[l] > arr[largest]) {
  120.         largest = l;
  121.     }
  122.    
  123.     if (r < n && arr[r] > arr[largest]) {
  124.         largest = r;
  125.     }
  126.    
  127.     if (largest != i) {
  128.         swap(arr[i], arr[largest]);
  129.         heapify(arr, n, largest);
  130.     }
  131. }
  132.  
  133. void heapSort(int arr[], int n) {
  134.     for (int i = n / 2 - 1; i >= 0; i--) {
  135.         heapify(arr, n, i);
  136.     }
  137.  
  138.     for (int i = n - 1; i >= 0; i--) {
  139.         swap(arr[0], arr[i]);
  140.         heapify(arr, i, 0);
  141.     }
  142. }
  143.  
  144. ////////////////
  145. // Merge Sort //
  146. ////////////////
  147. int recursiveMergeSort(int* F, int lowBorder, int highBorder) {
  148.     if (lowBorder >= highBorder) {
  149.         return 0;
  150.     }
  151.     int midBorder = (lowBorder + highBorder) / 2;
  152.     recursiveMergeSort(F, lowBorder, midBorder);
  153.     recursiveMergeSort(F, midBorder + 1, highBorder);
  154.     Merge(F, lowBorder, midBorder, highBorder);
  155. }
  156.  
  157. void Merge(int* F, int lowBorder, int midBorder, int highBorder) {
  158.     int i;
  159.     int j;
  160.     int k;
  161.     int n1 = midBorder - lowBorder + 1;
  162.     int n2 = highBorder - midBorder;
  163.  
  164.     int *temp1 = new int[n1];
  165.     int *temp2 = new int[n2];
  166.  
  167.     for (i = 0; i < n1; i++) {
  168.         temp1[i] = F[lowBorder + i];
  169.     }
  170.  
  171.     for (j = 0; j < n2; j++) {
  172.         temp2[j] = F[midBorder + 1 + j];
  173.     }
  174.  
  175.     i = 0;
  176.     j = 0;
  177.     k = lowBorder;
  178.  
  179.     while (i < n1 && j < n2) {
  180.         if (temp1[i] <= temp2[j]) {
  181.             F[k] = temp1[i];
  182.             i++;
  183.         }
  184.         else {
  185.             F[k] = temp2[j];
  186.             j++;
  187.         }
  188.         k++;
  189.     }
  190.  
  191.     while (i < n1) {
  192.         F[k] = temp1[i];
  193.         i++;
  194.         k++;
  195.     }
  196.  
  197.     while (j < n2) {
  198.         F[k] = temp2[j];
  199.         j++;
  200.         k++;
  201.     }
  202.  
  203.     delete[] temp1;
  204.     delete[] temp2;
  205. }
  206.  
  207. ///////////////////
  208. // Binary Search //
  209. ///////////////////
  210. int binarySearch(int arr[], int l, int r, int x) {
  211.     if (r >= l) {
  212.         int mid = l + (r - l) / 2;
  213.         //int mid = (l + r) / 2;
  214.    
  215.         if (arr[mid] == x) {
  216.             return mid;
  217.         }
  218.        
  219.         if (arr[mid] > x) {
  220.             return binarySearch(arr, l, mid - 1, x);
  221.         }
  222.        
  223.         return binarySearch(arr, mid + 1, r, x);
  224.     }
  225.    
  226.     return -1;
  227. }
  228.  
  229. //////////////////////////////
  230. // BFS = Обхождане в ширина //
  231. //////////////////////////////
  232.  
  233. /////////////////////////////////
  234. // DFS = Обхождане в дълбочина //
  235. /////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement