Advertisement
fcamuso

Algoritmi lezione 19 - Quick Sort, parte A

Mar 24th, 2024
535
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.46 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. int partiziona(int v[], int inizio, int fine)
  7. {
  8.   cout << string(40, '*') << endl;
  9.  
  10.   cout << "partiziono da " << inizio <<" a " << fine << endl;
  11.     int pivot = v[inizio];
  12.  
  13.     int cont = 0;
  14.     for (int i = inizio + 1; i <= fine; i++) {
  15.         if (v[i] <= pivot)
  16.             cont++;
  17.     }
  18.  
  19.     //mettiamo il pivot nella posizione che gli spetta
  20.     int indice_pivot = inizio + cont;
  21.     swap(v[indice_pivot], v[inizio]);
  22.     cout << "per pivot scambio " << v[indice_pivot] << " con " << v[inizio] << endl;
  23.  
  24.     // spostiamo gli elementi più piccoli del pivot alla sua sinistra
  25.     // e quelli più grandi alla sua destra
  26.     int i = inizio, j = fine;
  27.  
  28.     while (i < indice_pivot && j > indice_pivot) {
  29.  
  30.         while (v[i] <= pivot) {
  31.             i++;
  32.         }
  33.  
  34.         while (v[j] > pivot) {
  35.             j--;
  36.         }
  37.  
  38.         if (i < indice_pivot && j > indice_pivot) {
  39.       cout << "scambio " << v[i] << " con " << v[j] << endl;
  40.             swap(v[i], v[j]);
  41.             i++; j--;
  42.         }
  43.     }
  44.     cout << string(40, '-') << "\n\n";
  45.  
  46.     return indice_pivot;
  47. }
  48.  
  49. void quickSort(int v[], int inizio, int fine)
  50. {
  51.  
  52.     if (inizio >= fine)
  53.         return;
  54.  
  55.  
  56.     int p = partiziona(v, inizio, fine);
  57.  
  58.   // ordina la parte a sinistra
  59.     quickSort(v, inizio, p - 1);
  60.  
  61.     // ordina la parte a destra
  62.     quickSort(v, p + 1, fine);
  63. }
  64.  
  65. int main()
  66. {
  67.  
  68.     int v[] = { 81, 98, 78, 60, 115, -3, 45, 45, 1, 10 };
  69.     int n = 10;
  70.  
  71.     quickSort(v, 0, n - 1);
  72.  
  73.     for (int i = 0; i < n; i++) {
  74.         cout << v[i] << " ";
  75.     }
  76.  
  77.     return 0;
  78. }
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement