Patey

Untitled

Nov 12th, 2021
725
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6.  
  7. int N, count = 1;
  8. int pasi;
  9. void swap(int* a, int* b)
  10. {
  11.     int t = *a;
  12.     *a = *b;
  13.     *b = t;
  14. }
  15. void citire(int a[], int n)
  16. {
  17.     int i;
  18.     printf("Dati cele %d numere: ", n);
  19.     for (i = 0; i < n; i++)
  20.         scanf("%d", &a[i]);
  21. }
  22. void afisare(int a[], int n)
  23. {
  24.     int i;
  25.     for (i = 0; i < n; i++)
  26.         printf("%d ", a[i]);
  27.     printf("\n");
  28. }
  29. void interschimbare(int a[], int n)
  30. {
  31.     int i, j;
  32.     for (i = 0; i < n - 1; i++) {
  33.         for (j = i + 1; j < n; j++) {
  34.             if (a[i] > a[j]) {
  35.                 int aux = a[i];
  36.                 a[i] = a[j];
  37.                 a[j] = aux;
  38.             }
  39.         }
  40.         printf("Etapa %d: ", count);
  41.         count++;
  42.         afisare(a, n);
  43.     }
  44. }
  45.  
  46. int cautareBinara(int a[], int cautat, int s, int d)
  47. {
  48.     if (d <= s)
  49.     {
  50.         if (cautat > a[s])
  51.             return (s + 1);
  52.         else
  53.             return s;
  54.     }
  55.     int m = (s + d) / 2;
  56.     if (cautat == a[m])
  57.         return m + 1;
  58.     if (cautat > a[m])
  59.         return cautareBinara(a, cautat, m + 1, d);
  60.     return cautareBinara(a, cautat, s, m - 1);
  61. }
  62.  
  63. void insertie(int a[], int n)
  64. {
  65.     int i, j, aux;
  66.     for (i = 1; i < n; i++)
  67.     {
  68.         aux = a[i];
  69.         j = i - 1;
  70.         while (j >= 0 && a[j] > aux)
  71.         {
  72.             a[j + 1] = a[j];
  73.             j = j - 1;
  74.         }
  75.  
  76.         a[j + 1] = aux;
  77.         printf("Etapa %d: ", i);
  78.         afisare(a, n);
  79.     }
  80. }
  81.  
  82.  
  83.  
  84. void insertieBinara(int a[], int n)
  85. {
  86.     int i, j, aux, loc;
  87.     for (i = 1; i < n; i++)
  88.     {
  89.         j = i - 1;
  90.         aux = a[i];
  91.         loc = cautareBinara(a, aux, 0, j);
  92.         while (j >= loc)
  93.         {
  94.             a[j + 1] = a[j];
  95.             j--;
  96.         }
  97.         a[j + 1] = aux;
  98.         printf("\nEtapa %d: ", i);
  99.         afisare(a, n);
  100.     }
  101. }
  102.  
  103. void selectie(int a[], int n)
  104. {
  105.     int i, j, k_min, aux;
  106.     for (i = 0; i < n - 1; i++)
  107.     {
  108.         k_min = i;
  109.         aux = a[i];
  110.         for (j = i + 1; j < n; j++)
  111.             if (a[j] < a[k_min])
  112.             {
  113.                 k_min = j;
  114.                 aux = a[k_min];
  115.             }
  116.         a[k_min] = a[i];
  117.         a[i] = aux;
  118.         printf("\nEtapa %d: ", i + 1);
  119.         afisare(a, n);
  120.     }
  121. }
  122. void selectiePerformanta(int a[], int n)
  123. {
  124.     int i, j, k_min, aux;
  125.     for (i = 0; i < n - 1; i++)
  126.     {
  127.         k_min = i;
  128.         for (j = i + 1; j < n; j++)
  129.             if (a[j] < a[k_min])
  130.                 k_min = j;
  131.         aux = a[k_min];
  132.         a[k_min] = a[i];
  133.         a[i] = aux;
  134.         printf("\nEtapa %d: ", i + 1);
  135.         afisare(a, n);
  136.     }
  137. }
  138.  
  139. void bubbleSort(int a[], int n)
  140. {
  141.     int i, j, aux;
  142.     for (i = 1; i < n; i++)
  143.     {
  144.         for (j = n - 1; j >= i; j--)
  145.             if (a[j - 1] > a[j])
  146.             {
  147.                 aux = a[j - 1];
  148.                 a[j - 1] = a[j];
  149.                 a[j] = aux;
  150.             }
  151.         printf("\nEtapa %d: ", i);
  152.         afisare(a, n);
  153.     }
  154.  
  155. }
  156.  
  157. void shakeSort(int a[], int n)
  158. {
  159.     int  j, k, s, d, aux, count = 1;
  160.     s = 1;
  161.     d = n - 1;
  162.     k = n - 1;
  163.     do
  164.     {
  165.         for (j = d; j >= s; j--)
  166.         {
  167.             if (a[j - 1] > a[j])
  168.             {
  169.                 aux = a[j - 1];
  170.                 a[j - 1] = a[j];
  171.                 a[j] = aux;
  172.                 k = j;
  173.             }
  174.         }
  175.         s = k + 1;
  176.         for (j = s; j <= d; j++)
  177.         {
  178.             if (a[j - 1] > a[j])
  179.             {
  180.                 aux = a[j - 1];
  181.                 a[j - 1] = a[j];
  182.                 a[j] = aux;
  183.                 k = j;
  184.             }
  185.         }
  186.         d = k - 1;
  187.         printf("\nEtapa %d: ", count);
  188.         afisare(a, n);
  189.         count++;
  190.  
  191.     } while (s <= d);
  192. }
  193. void binsort(int a[], int n)
  194. {
  195.     int i, aux;
  196.     for (i = 0; i < n; i++)
  197.     {
  198.         while (a[i] != i)
  199.         {
  200.             aux = a[a[i]];
  201.             a[a[i]] = a[i];
  202.             a[i] = aux;
  203.         }
  204.         printf("Etapa %d: ", i + 1);
  205.         afisare(a, n);
  206.     }
  207. }
  208.  
  209. void shellsort(int a[], int n)
  210. {
  211.     int i, j, aux, l, k;
  212.     int h[3] = { 7,3,1 };
  213.     for (l = 0; l < 3; l++)
  214.     {
  215.         k = h[l];
  216.         for (i = k; i < n; i++)
  217.         {
  218.             aux = a[i];
  219.             j = i - k;
  220.             while (j >= 0 && aux < a[j])
  221.             {
  222.                 a[j + k] = a[j];
  223.                 j = j - k;
  224.             }
  225.             a[j + k] = aux;
  226.         }
  227.         printf("Trecerea %d: ", l + 1);
  228.         afisare(a, n);
  229.     }
  230. }
  231.  
  232. void heapify(int arr[], int n, int i)
  233. {
  234.     int aux;
  235.     int largest = i; // Initialize largest as root
  236.     int l = 2 * i + 1; // left = 2*i + 1
  237.     int r = 2 * i + 2; // right = 2*i + 2
  238.  
  239.     // If left child is larger than root
  240.     if (l < n && arr[l] > arr[largest])
  241.         largest = l;
  242.  
  243.     // If right child is larger than largest so far
  244.     if (r < n && arr[r] > arr[largest])
  245.         largest = r;
  246.     // If largest is not root
  247.     if (largest != i)
  248.     {
  249.         aux = arr[i];
  250.         arr[i] = arr[largest];
  251.         arr[largest] = aux;
  252.  
  253.         // Recursively heapify the affected sub-tree
  254.         heapify(arr, n, largest);
  255.     }
  256. }
  257.  
  258. // main function to do heap sort
  259. void heapSort(int arr[], int n)
  260. {
  261.     int aux;
  262.     // Build heap (rearrange array)
  263.     for (int i = n / 2 - 1; i >= 0; i--)
  264.     {
  265.         heapify(arr, n, i);
  266.         printf("Etapa %da: ", n / 2 - i);
  267.         afisare(arr, n);
  268.     }
  269.  
  270.     // One by one extract an element from heap
  271.     for (int i = n - 1; i > 0; i--)
  272.     {
  273.         // Move current root to end
  274.         aux = arr[0];
  275.         arr[0] = arr[i];
  276.         arr[i] = aux;
  277.         printf("Etapa %db: ", n - i);
  278.         afisare(arr, n);
  279.         // call max heapify on the reduced heap
  280.         heapify(arr, i, 0);
  281.     }
  282. }
  283. int partition(int arr[], int low, int high)
  284. {
  285.     int pivot = arr[high];    // pivot
  286.     int i = (low - 1);  // Index of smaller element
  287.  
  288.     for (int j = low; j <= high - 1; j++)
  289.     {
  290.         // If current element is smaller than the pivot
  291.         if (arr[j] < pivot)
  292.         {
  293.             i++;    // increment index of smaller element
  294.             swap(&arr[i], &arr[j]);
  295.         }
  296.     }
  297.     swap(&arr[i + 1], &arr[high]);
  298.     return (i + 1);
  299. }
  300.  
  301. void quickSort(int a[], int s, int d)
  302. {
  303.     if (s < d)
  304.     {
  305.         int pi = partition(a, s, d);
  306.         printf("Etapa %d: ", count);
  307.         count++;
  308.         afisare(a, N);
  309.         quickSort(a, s, pi - 1);
  310.         quickSort(a, pi+1, d);
  311.     }
  312. }
  313.  
  314. int biti(int x, int k, int j)
  315. {
  316.     return (x >> k) & ~(~0 << j);
  317. }
  318.  
  319. void radix_interschimbare(int a[], int s, int d, int b)
  320. {
  321.     int i, j, aux;
  322.     if (d > s && b >= 0)
  323.     {
  324.         i = s;
  325.         j = d;
  326.         do
  327.         {
  328.             while (i < j && biti(a[i], b, 1) == 0)
  329.                 i++;
  330.             while (i < j && biti(a[j], b, 1) == 1)
  331.                 j--;
  332.             aux = a[i];
  333.             a[i] = a[j];
  334.             a[j] = aux;
  335.  
  336.         } while (i != j);
  337.         printf("Etapa %d: ", count);
  338.         count++;
  339.         afisare(a, N);
  340.         if (biti(a[d], b, 1) == 0)
  341.             j++;
  342.         radix_interschimbare(a, s, j - 1, b - 1);
  343.         radix_interschimbare(a, j, d, b - 1);
  344.     }
  345. }
  346. void radix_direct(int a[], int n)
  347. {
  348.     int b, T[100], Numar[100], m, k, i, t;
  349.     b = sizeof(int) * 8;
  350.     m = 2;
  351.     for (t = 0; t < b / m; t++)
  352.     {
  353.         for (i = 0; i < pow(2, m); i++)
  354.             Numar[i] = 0;
  355.         for (i = 0; i < n; i++)
  356.         {
  357.             k = biti(a[i], t * m, m);
  358.             Numar[k]++;
  359.         }
  360.         for (i = 1; i < pow(2, m); i++)
  361.             Numar[i] = Numar[i] + Numar[i - 1];
  362.         for (i = n - 1; i >= 0; i--)
  363.         {
  364.             k = biti(a[i], t * m, m);
  365.             T[Numar[k] - 1] = a[i];
  366.             Numar[k]--;
  367.  
  368.         }
  369.         printf("Etapa %d: ", t + 1);
  370.         afisare(T, n);
  371.         for (i = 0; i < n; i++)
  372.             a[i] = T[i];
  373.     }
  374. }
  375.  
  376. int cautare_liniara(int* a, int N)
  377. {
  378.     int x;
  379.     printf("El: ");
  380.     scanf("%d", &x);
  381.     int i;
  382.     for (i = 0; i < N; i++)
  383.     {
  384.         if (a[i] == x)
  385.             return i;
  386.     }
  387.     return -1;
  388. }
  389.  
  390. int cautare_fanion(int* a, int N)
  391. {
  392.     int x;
  393.     printf("El: ");
  394.     scanf("%d", &x);
  395.     int i = 0;
  396.     a[N] = x;
  397.     while (a[i] != x)
  398.     {
  399.         i++;
  400.     }
  401.     return i;
  402. }
  403.  
  404. int cautare_binara(int s, int d, int* a)
  405. {
  406.     int x;
  407.     printf("El: ");
  408.     scanf("%d", &x);
  409.     int m;
  410.     if (s > d)
  411.         return -1;
  412.     else
  413.     {
  414.         m = (s + d) / 2;
  415.         if (x == a[m])
  416.             return m;
  417.         if (x < a[m])
  418.             return cautare_binara(s, m - 1, a);
  419.         else
  420.             return cautare_binara(m + 1, d, a);
  421.     }
  422. }
  423.  
  424. int cautare_interpolare(int* a, int ic, int sf)
  425. {
  426.     int x;
  427.     printf("El: ");
  428.     scanf("%d", &x);
  429.     if (ic <= sf)
  430.     {
  431.         int m;
  432.         m = ic + (x - a[ic]) * (sf - ic) / (a[sf] - a[ic]);
  433.         if (x == a[m])
  434.             return m + 1;
  435.         else
  436.             if (x < a[m])
  437.                 return cautare_interpolare(a, ic, m - 1);
  438.             else
  439.                 return cautare_interpolare(a,m + 1, sf);
  440.     }
  441.     else return 0;
  442. }
  443.  
  444.  
  445. int main()
  446. {
  447.     int a[20], n, opt, b,x;
  448.     do
  449.     {
  450.         printf("1.Sortare prin insertie\n");
  451.         printf("2.Sortare prin selectie\n");
  452.         printf("3.Sortare Bubblesort\n");
  453.         printf("4.Shakesort\n");
  454.         printf("5.Binsort\n");
  455.         printf("6.Shellsort\n");
  456.         printf("7.Heap sort(ansamblu invers)\n");
  457.         printf("8.Quicksort\n");
  458.         printf("9.Radix interschimbare\n");
  459.         printf("10.Radix direct\n");
  460.         printf("11.Interschimbare\n");
  461.         printf("12.Cautare liniara\n");
  462.         printf("13.Cautare fanion\n");
  463.         printf("14.Cautare binara\n");
  464.         printf("15.Cautare interpolare\n");
  465.         printf("16.Insertie binara\n");
  466.         printf("0.Iesire\n");
  467.         printf("Dati optiunea: ");
  468.         scanf("%d", &opt);
  469.         switch (opt)
  470.         {
  471.         case 1:
  472.             printf("SORTAREA PRIN INSERTIE\n");
  473.             printf("n=");
  474.             scanf("%d", &n);
  475.             citire(a, n);
  476.             insertie(a, n);
  477.             printf("\nTabloul dupa sortare:\n");
  478.             afisare(a, n);
  479.             break;
  480.         case 2:
  481.             printf("\nSORTAREA PRIN SELECTIE\n");
  482.             printf("n=");
  483.             scanf("%d", &n);
  484.             citire(a, n);
  485.             selectie(a, n);
  486.             printf("\nTabloul dupa sortare:\n");
  487.             afisare(a, n);
  488.             break;
  489.         case 3:
  490.             printf("\nBUBLE SORT\n");
  491.             printf("n=");
  492.             scanf("%d", &n);
  493.             citire(a, n);
  494.             bubbleSort(a, n);
  495.             printf("\nTabloul dupa sortare:\n");
  496.             afisare(a, n);
  497.             break;
  498.         case 4:
  499.             printf("\nSHAKE SORT\n");
  500.             printf("n=");
  501.             scanf("%d", &n);
  502.             citire(a, n);
  503.             shakeSort(a, n);
  504.             printf("\nTabloul dupa sortare:\n");
  505.             afisare(a, n);
  506.             break;
  507.         case 5:
  508.             printf("\nBinsort\n");
  509.             printf("n=");
  510.             scanf("%d", &n);
  511.             citire(a, n);
  512.             binsort(a, n);
  513.             printf("\nTabloul dupa sortare:\n");
  514.             afisare(a, n);
  515.             break;
  516.         case 6:
  517.             printf("Shellsort");
  518.             printf("n=");
  519.             scanf("%d", &n);
  520.             citire(a, n);
  521.             shellsort(a, n);
  522.             printf("\nTabloul dupa sortare:\n");
  523.             afisare(a, n);
  524.             break;
  525.         case 7:
  526.             printf("\nHEAPSORT\n");
  527.             printf("n=");
  528.             scanf("%d", &n);
  529.             citire(a, n);
  530.             heapSort(a, n);
  531.             printf("\nTabloul dupa sortare:\n");
  532.             afisare(a, n);
  533.             break;
  534.         case 8:
  535.             printf("\nQUICKSORT\n");
  536.             printf("n=");
  537.             scanf("%d", &n);
  538.             N = n;
  539.             count = 1;
  540.             citire(a, n);
  541.             quickSort(a, 0, n - 1);
  542.             printf("\nTabloul dupa sortare:\n");
  543.             afisare(a, n);
  544.             break;
  545.         case 9:
  546.             printf("\nRADIX INTERSCHIMBARE\n");
  547.             printf("n=");
  548.             scanf("%d", &n);
  549.             citire(a, n);
  550.             b = sizeof(int) * 8;
  551.             N = n;
  552.             count = 1;
  553.             radix_interschimbare(a, 0, n - 1, b - 1);
  554.             printf("\nTabloul dupa sortare:\n");
  555.             afisare(a, n);
  556.             break;
  557.         case 10:
  558.             printf("\nRADIX DIRECT\n");
  559.             printf("n=");
  560.             scanf("%d", &n);
  561.             citire(a, n);
  562.             radix_direct(a, n);
  563.             printf("\nTabloul dupa sortare:\n");
  564.             afisare(a, n);
  565.             break;
  566.         case 11:
  567.             printf("\nInterschimbare\n");
  568.             printf("n=");
  569.             scanf("%d", &n);
  570.             citire(a, n);
  571.             interschimbare(a, n);
  572.             printf("\nTabloul dupa sortare:\n");
  573.             afisare(a, n);
  574.             break;
  575.         case 12:
  576.             printf("n=");
  577.             scanf("%d", &n);
  578.             citire(a, n);
  579.             printf("%d\n", cautare_liniara(a,n));
  580.             break;
  581.         case 13:
  582.             printf("n=");
  583.             scanf("%d", &n);
  584.             citire(a, n);
  585.             printf("El: ");
  586.             scanf("%d", &x);
  587.             printf("%d\n", cautare_fanion(a, n));
  588.             break;
  589.         case 14:
  590.             printf("n=");
  591.             scanf("%d", &n);
  592.             citire(a, n);
  593.             printf("El: ");
  594.             scanf("%d", &x);
  595.             printf("%d\n", cautare_binara(0, n - 1, a));
  596.             break;
  597.         case 15:
  598.             printf("n=");
  599.             scanf("%d", &n);
  600.             citire(a, n);
  601.             printf("El: ");
  602.             scanf("%d", &x);
  603.             printf("%d\n", cautare_interpolare(a, 0, n - 1));
  604.             break;
  605.         case 16:
  606.             printf("n=");
  607.             scanf("%d", &n);
  608.             citire(a, n);
  609.             insertieBinara(a, n);
  610.             printf("\nTabloul dupa sortare:\n");
  611.             afisare(a, n);
  612.         case 0:
  613.             printf("\nAti oprit consola interactiva\n");
  614.             break;
  615.         default:
  616.             printf("\nOPTIUNE INVALIDA\n");
  617.             break;
  618.         }
  619.     } while (opt != 0);
  620.     getch();
  621.     return 0;
  622. }
Advertisement
Add Comment
Please, Sign In to add comment