Advertisement
Tucancitto

Sortări

Jan 31st, 2021
825
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. void citire(int vect[], int& dim)
  6. {
  7.     ifstream f("sortări.in");
  8.     f >> dim;
  9.     for (int i = 0; i < dim; i++)
  10.         f >> vect[i];
  11. }
  12.  
  13. void afisare(int vect[], int dim)
  14. {
  15.     for (int i = 0; i < dim; i++)
  16.         cout << vect[i] << ' ';
  17.     cout << endl;
  18. }
  19.  
  20. // Sortarea prin interschimbare
  21. void SortareInterschimbare(int vect[], int dim)
  22. {
  23.     for (int i = 0; i < dim - 1; i++)
  24.         for (int j = i + 1; j < dim; j++)
  25.             if (vect[i] > vect[j])
  26.                 swap(vect[i], vect[j]);
  27. }
  28.  
  29. // Sortarea prin selectie
  30. void SortareSelectie(int vect[], int dim)
  31. {
  32.     for (int i = 0; i < dim; i++)
  33.     {
  34.         int min = vect[i], poz = i;
  35.  
  36.         for (int j = i + 1; j < dim; j++)
  37.             if (vect[j] < min)
  38.             {
  39.                 min = vect[j];
  40.                 poz = j;
  41.             }
  42.         swap(vect[i], vect[poz]);
  43.     }
  44. }
  45.  
  46. // Sortarea prin metoda bulelor
  47. void SortareBule(int vect[], int dim)
  48. {
  49.     bool ok = 0;
  50.     do
  51.     {
  52.         ok = 0;
  53.         for (int i = 0; i < dim - 1; i++)
  54.             if (vect[i] > vect[i + 1])
  55.             {
  56.                 ok = 1;
  57.                 swap(vect[i], vect[i + 1]);
  58.             }
  59.     } while (ok == 1);
  60. }
  61.  
  62. // Sortare prin interclasare
  63. int vectAux[30];
  64. void SortareInterclasare(int vect[], int st, int dr)
  65. {
  66.     if (st < dr)
  67.     {
  68.         int mij = (st + dr) / 2;
  69.         SortareInterclasare(vect, st, mij);
  70.         SortareInterclasare(vect, mij + 1, dr);
  71.  
  72.         //Interclasare
  73.         int i = st, j = mij + 1, k = 0;
  74.         while (i <= mij && j <= dr)
  75.             if (vect[i] < vect[j])
  76.                 vectAux[++k] = vect[i++];
  77.             else
  78.                 vectAux[++k] = vect[j++];
  79.         while (i <= mij)
  80.             vectAux[++k] = vect[i++];
  81.         while (j <= dr)
  82.             vectAux[++k] = vect[j++];
  83.  
  84.         for (i = st, j = 1; i <= dr; i++, j++)
  85.             vect[i] = vectAux[j];
  86.     }
  87. }
  88.  
  89. // Sortarea rapida
  90. void QuickSort(int vect[], int stanga, int dreapta)
  91. {
  92.     int i = stanga, j = dreapta;
  93.     int pivot = vect[(stanga + dreapta) / 2];
  94.  
  95.     /*Partitionare */
  96.     while (i <= j)
  97.     {
  98.         while (vect[i] < pivot) //> pt descr
  99.             i++;
  100.         while (vect[j] > pivot) //< pt descr
  101.             j--;
  102.         if (i <= j)
  103.         {
  104.             int tmp = vect[i];
  105.             vect[i] = vect[j];
  106.             vect[j] = tmp;
  107.             i++;
  108.             j--;
  109.         }
  110.     }
  111.  
  112.     /* Recursivitate */
  113.     if (stanga < j)
  114.         QuickSort(vect, stanga, j);
  115.     if (i < dreapta)
  116.         QuickSort(vect, i, dreapta);
  117. }
  118.  
  119. // BucketSort
  120. int maxVect(int vect[], int dim)
  121. {
  122.     int max = -1;
  123.     for (int i = 0; i < dim; i++)
  124.         if (max < vect[i])
  125.             max = vect[i];
  126.     return max;
  127. }
  128.  
  129. void BucketSort(int vect[], int dim, int max)
  130. {
  131.     int vectAux[10] = { 0 };
  132.  
  133.     for (int i = 0; i < dim; i++)
  134.         vectAux[vect[i]]++;
  135.  
  136.     int index = 0;
  137.     for (int i = 0; i <= max; i++)
  138.         for (int j = 0; j < vectAux[i]; j++)
  139.             vect[index++] = i;
  140. }
  141.  
  142. // CountingSort
  143. void CountingSort(int vect[], int dim, int max)
  144. {
  145.     int vectCount[30] = { 0 }, vectSort[30] = { 0 };
  146.  
  147.     for (int i = 0; i < dim; i++)
  148.         vectCount[vect[i]]++;
  149.  
  150.     for (int i = 1; i <= max; i++)
  151.         vectCount[i] += vectCount[i - 1];
  152.  
  153.     for (int i = 0; i < dim; i++)
  154.         vectSort[vectCount[vect[i]] - 1] = vect[i];
  155.  
  156.     for (int i = 0; i < dim; i++)
  157.         vect[i] = vectSort[i];
  158. }
  159.  
  160. int main()
  161. {
  162.     int dim, vect[30] = { 0 };
  163.     citire(vect, dim);
  164.  
  165.     /*
  166.     SortareInterschimbare(vect, dim);
  167.     cout << "Sortarea prin interschimbare: \n";
  168.     afisare(vect, dim);
  169.  
  170.     SortareSelectie(vect, dim);
  171.     cout << "Sortarea prin selectia minimului: \n";
  172.     afisare(vect, dim);
  173.  
  174.     SortareBule(vect, dim);
  175.     cout << "Sortarea prin metoda bulelor: \n";
  176.     afisare(vect, dim);
  177.  
  178.     SortareInterclasare(vect, 0, dim - 1);
  179.     cout << "Sortarea prin interclasare: \n";
  180.     afisare(vect, dim);
  181.  
  182.     QuickSort(vect, 0, dim - 1);
  183.     cout << "Sortarea rapida: \n";
  184.     afisare(vect, dim);
  185.     */
  186.  
  187.     int vect1[30] = { 0, 12, 2, 3, 4, 0, 9, 5 };
  188.  
  189.     /*
  190.     BucketSort(vect1, 8, maxVect(vect1, 8));
  191.     cout << "Bucket Sort: \n";
  192.     afisare(vect1, 8);
  193.     */
  194.  
  195.     CountingSort(vect1, 8, maxVect(vect1, 8));
  196.     cout << "Counting Sort: \n";
  197.     afisare(vect1, 8);
  198.  
  199.     return 0;
  200. }
  201.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement