Advertisement
Nuparu00

magnum est imperium romanum

Nov 23rd, 2021
862
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.54 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <limits.h>
  5.  
  6. #define SIZE 10
  7.  
  8. int main()
  9. {
  10.     printf("Hello world!\n");
  11.  
  12.     time_t t;
  13.     //srand((unsigned) time(&t));
  14.     srand(0);
  15.  
  16.     while(1){
  17.         int arr[SIZE];
  18.         napln_pole(arr,SIZE);
  19.         /*arr[0] = 8;
  20.         arr[1] = 7;
  21.         arr[2] = 1;
  22.         arr[3] = 2;
  23.         arr[4] = 9;*/
  24.         int copy[SIZE];
  25.         copyArray(arr,copy,SIZE);
  26.  
  27.  
  28.         printf("Orig\n");
  29.         printArr(arr,SIZE);
  30.  
  31.         /*printf("Bubble\n");
  32.         bubbleSort(arr,SIZE);
  33.         printArr(arr,SIZE);
  34.  
  35.         printf("Shaker\n");
  36.         printArr(copy,SIZE);
  37.         shakerSort(copy,SIZE);
  38.         printArr(copy,SIZE);
  39.         printf("-------------------------\n");
  40. */
  41.         printf("RadixSort\n");
  42.         //heapSort(arr,SIZE);
  43.         //int out[SIZE];
  44.         //countingSort(arr,out,SIZE,100);
  45.         //printArr(out,SIZE);
  46.         /*int n = 8192;
  47.         int d = getDigit(n,4);
  48.         printf("%d %d \n",n, d);*/
  49.  
  50.         radixSort(copy,SIZE,4);
  51.         printArr(copy,SIZE);
  52.  
  53.  
  54.         /*printf("-------------------------\n");
  55.  
  56.  
  57.         printf("Fib for %d = %d \n", arr[0], fib(arr[0]));*/
  58.  
  59.         char c;
  60.         scanf("%c",&c);
  61.  
  62.     }
  63.     return 0;
  64. }
  65.  
  66. void napln_pole(int pole[], int velikost){
  67.     for (int i = 0; i < velikost; i++){
  68.       pole[i] = rand() % 1001;  //% 100 zajistuje rozsah 0-99. pro rozsah 0-1000 pouzijte % 1001
  69.     }
  70. }
  71.  
  72.  
  73.  
  74. void insertSort(int arr[], int length){
  75.     int i;
  76.     for(i = 1; i < length; i++){
  77.         int temp = arr[i];
  78.         int j = i -1;
  79.         while(j >= 0 && temp < arr[j]){
  80.             arr[j+1] = arr[j];
  81.             j--;
  82.         }
  83.         arr[j+1] = temp;
  84.     }
  85. }
  86.  
  87.  
  88. void selectionSort(int arr[], int length){
  89.     int i;
  90.     for(i = 0; i < length; i++){
  91.  
  92.         int min = i;
  93.  
  94.         int j;
  95.         for(j = i+1; j < length; j++){
  96.             if(arr[j] < arr[min]){
  97.                 min = j;
  98.             }
  99.         }
  100.  
  101.         int temp = arr[min];
  102.         arr[min] = arr[i];
  103.         arr[i] = temp;
  104.     }
  105. }
  106.  
  107. void bubbleSort(int arr[], int length){
  108.     int s = 0;
  109.  
  110.     int i;
  111.     int lastSwapL = 0;
  112.  
  113.     for(i = 0; i < length-2; i++){
  114.         int endL = lastSwapL;
  115.         int j;
  116.         for(j = length-1; j > endL; j--){
  117.             int a = arr[j];
  118.             int b = arr[j-1];
  119.             if(a < b){
  120.                 arr[j] = b;
  121.                 arr[j-1] = a;
  122.                 lastSwapL = j;
  123.                 s++;
  124.             }
  125.         }
  126.         printf("i %d\n",i);
  127.     }
  128.     printf("%d\n",s);
  129.  
  130. }
  131.  
  132. void shakerSort(int arr[], int length){
  133.     int s = 0;
  134.  
  135.     int i;
  136.     int lastSwapL = 0;
  137.     int lastSwapR = length-2;
  138.  
  139.     for(i = 0; i < length-2; i++){
  140.         int dirty = 0;
  141.         int endL = lastSwapL;
  142.         int j;
  143.         for(j = length-1; j > endL; j--){
  144.             int a = arr[j];
  145.             int b = arr[j-1];
  146.  
  147.             if(a < b){
  148.                 arr[j] = b;
  149.                 arr[j-1] = a;
  150.                 lastSwapL = j;
  151.                 s++;
  152.                 dirty = 1;
  153.             }
  154.         }
  155.  
  156.         if(dirty == 0) break;
  157.         dirty = 0;
  158.  
  159.         int endR = lastSwapR;
  160.         for(j = i; j < endR; j++){
  161.             int a = arr[j];
  162.             int b = arr[j+1];
  163.  
  164.             if(a > b){
  165.                 arr[j] = b;
  166.                 arr[j+1] = a;
  167.                 lastSwapR = j;
  168.                 s++;
  169.                 dirty = 1;
  170.             }
  171.         }
  172.         printf("i %d\n",i);
  173.         if(dirty == 0) break;
  174.     }
  175.     printf("%d\n",s);
  176.  
  177. }
  178.  
  179. void quickSort(int arr[], int start, int end){
  180.     if(start < end){
  181.         int part = partition(arr, start, end);
  182.         quickSort(arr,start,part-1);
  183.         quickSort(arr,part+1,end);
  184.     }
  185. }
  186.  
  187. int partition(int arr[], int start, int end){
  188.     int pivot = arr[end];
  189.     int i = start-1;
  190.     int j;
  191.     for(j = start; j < end; j++){
  192.         if(arr[j] <= pivot){
  193.             swap(arr,++i,j);
  194.         }
  195.     }
  196.     swap(arr,++i,end);
  197.     return i;
  198. }
  199.  
  200. void mergeSort(int arr[], int start, int end){
  201.     if(start < end){
  202.         int mid = start+(end-start)/2; //We can not just do (start+end)/2 as we would risk overflow
  203.         mergeSort(arr,start,mid);
  204.         mergeSort(arr,mid+1,end);
  205.         merge(arr,start,mid,end);
  206.     }
  207. }
  208.  
  209. void merge(int arr[], int start, int mid, int end){
  210.     int lengthL = mid-start+1;
  211.     int lengthR = end-mid;
  212.  
  213.     int left[lengthL];
  214.     int right[lengthR];
  215.  
  216.     for(int i = 0; i < lengthL; i++){
  217.         left[i] = arr[start+i];
  218.     }
  219.  
  220.     for(int i = 0; i < lengthR; i++){
  221.         right[i] = arr[mid+i+1];
  222.     }
  223.  
  224.     left[lengthL] = INT_MAX; //Requires limits.h
  225.     right[lengthR] = INT_MAX;
  226.  
  227.     int iL = 0;
  228.     int iR = 0;
  229.  
  230.     for(int i = start; i <= end; i++){
  231.         if(left[iL] <= right[iR]){
  232.             arr[i] = left[iL];
  233.             iL++;
  234.         }
  235.         else {
  236.             arr[i] = right[iR];
  237.             iR++;
  238.         }
  239.     }
  240. }
  241.  
  242.  
  243. void swap(int arr[], int i, int j){
  244.     int temp = arr[i];
  245.     arr[i] = arr[j];
  246.     arr[j] = temp;
  247. }
  248.  
  249. void printArr(int arr[], int length){
  250.     printf("[");
  251.     for(int i = 0; i < length; i++){
  252.         printf("%d",arr[i]);
  253.         if(i < length-1){
  254.             printf(", ");
  255.         }
  256.     }
  257.     printf("] \n");
  258. }
  259.  
  260. void copyArray(int src[], int dst[], int length){
  261.     for(int i = 0; i < length; i++){
  262.             dst[i] = src[i];
  263.     }
  264. }
  265.  
  266. int fib(int n){
  267.     if(n < 0) return -1;
  268.     if(n == 0 || n== 1) return 1;
  269.     return fib(n-1)+fib(n-2);
  270. }
  271.  
  272. int getParent(int i){
  273.     return (i-1)/2;
  274. }
  275.  
  276. int getLeft(int i){
  277.     return 2*i+1;
  278. }
  279.  
  280. int getRight(int i){
  281.     return 2*i+2;
  282. }
  283.  
  284. void heapify(int arr[], int size, int i){
  285.     int left = getLeft(i);
  286.     int right = getRight(i);
  287.     int largest = i;
  288.  
  289.     if(left < size && arr[left] > arr[largest]){
  290.         largest = left;
  291.     }
  292.  
  293.     if(right < size && arr[right] > arr[largest]){
  294.         largest = right;
  295.     }
  296.  
  297.     if(largest != i){
  298.         swap(arr,i,largest);
  299.         heapify(arr,size,largest);
  300.     }
  301.  
  302. }
  303.  
  304. void buildMaxHeap(int arr[], int size){
  305.     for(int i = size/2 -1; i >= 0; i--){
  306.         heapify(arr,size,i);
  307.     }
  308. }
  309.  
  310. void heapSort(int arr[], int size){
  311.     buildMaxHeap(arr,size);
  312.  
  313.     for(int i = size-1; i > 0; i--){
  314.         swap(arr,0,i);
  315.         heapify(arr,i,0);
  316.     }
  317. }
  318.  
  319.  
  320. void countingSort(int in[], int out[], int size, int range){
  321.     int counts[range];
  322.  
  323.     for(int i = 0; i < range; i++){
  324.         counts[i] = 0;
  325.     }
  326.  
  327.     for(int i = 0; i < size; i++){
  328.         counts[in[i]] = counts[in[i]] + 1;
  329.     }
  330.  
  331.     for(int i = 1; i < range; i++){
  332.         counts[i] = counts[i]+counts[i-1];
  333.     }
  334.  
  335.     for(int i = size-1; i >= 0; i--){
  336.         //printf("%d \n",sizeof(counts)/sizeof(int));
  337.         out[counts[in[i]] - 1] = in[i];
  338.         counts[in[i]] = counts[in[i]] - 1;
  339.     }
  340. }
  341.  
  342. void radixSort(int arr[], int size, int d){
  343.     for(int i = 0; i < d; i++){
  344.         insertSortRadix(arr,size,i);
  345.     }
  346. }
  347.  
  348. int getDigit(int n, int digit){
  349.     return n%power(10,digit)/(power(10,digit-1));
  350. }
  351.  
  352. int power(int base, int n){
  353.     int out = 1;
  354.     for(int i = 0; i < n; i++){
  355.         out*=base;
  356.     }
  357.     return out;
  358. }
  359.  
  360. void insertSortRadix(int arr[], int length, int d){
  361.     int i;
  362.     for(i = 1; i < length; i++){
  363.         int temp = arr[i];
  364.  
  365.         //printf("%d %d \n",d,i);
  366.         int j = i -1;
  367.         while(j >= 0 && getDigit(temp,d+1) < getDigit(arr[j],d+1)){
  368.             arr[j+1] = arr[j];
  369.             j--;
  370.         }
  371.         arr[j+1] = temp;
  372.     }
  373. }
  374.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement