Advertisement
AnhVan1712

Các hoán vị

May 1st, 2020
412
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.62 KB | None | 0 0
  1. #include <stdio.h>
  2. void nhap(int n, int A[]);
  3. void xuat(int n, int A[], int &dem);
  4. int phanTuNhoNhatMaLonHonX(int A[], int n, int viTri);
  5. void xuLy(int n, int A[], int &dem);
  6. void daoChuoi(int x, int n, int A[]);
  7. int main()
  8. {
  9.     int n, dem = 1;
  10.     printf("Nhap so luong phan tu cua mang !\n");
  11.     scanf ("%d", &n);
  12.     int* A = new int[n];
  13.     nhap(n, A);
  14.     xuLy(n, A, dem);
  15.     delete[] A;
  16.     printf("\nSo hoan vi la : %d\n ", dem);
  17.     return 1;
  18. }
  19. void daoChuoi(int x, int n, int A[])
  20. {
  21.     int j = n;
  22.     for (int i = x; i < (n + x) / 2; i++)
  23.     {
  24.         int tmp = A[i];
  25.         j = j - 1;
  26.         A[i] = A[j];
  27.         A[j] = tmp;
  28.     }
  29. }
  30. int phanTuNhoNhatMaLonHonX(int A[], int n, int viTri)
  31. {
  32.     int viTriMin=viTri;
  33.     for (int j = viTri; j < n; j++)
  34.     {
  35.         if ((A[viTri - 1] < A[j]) && (A[j] < A[viTriMin]))
  36.         {
  37.             viTriMin = j;
  38.         }
  39.     }
  40.     return viTriMin;
  41. }
  42. void xuLy(int n, int A[], int &dem)
  43. {
  44.     int kt;
  45.     do
  46.     {
  47.         kt = 0;
  48.         for (int i = n - 1; i > 0; i--)
  49.         {
  50.             if (A[i] > A[i - 1])
  51.             {
  52.                 kt = 1;
  53.                 if (i == n - 1)
  54.                 {
  55.                     int tmp = A[i];
  56.                     A[i] = A[i - 1];
  57.                     A[i - 1] = tmp;
  58.                     xuat(n, A, dem);
  59.                     break;
  60.                 }
  61.                 else
  62.                 {
  63.                     int viTri = phanTuNhoNhatMaLonHonX(A, n, i);
  64.                     int tmp = A[viTri];
  65.                     A[viTri] = A[i - 1];
  66.                     A[i - 1] = tmp;
  67.                     daoChuoi(i, n, A);
  68.                     xuat(n, A, dem);
  69.                     break;
  70.                 }
  71.             }
  72.         }
  73.     } while (kt == 1);
  74. }
  75. void xuat(int n, int A[], int &dem)
  76. {
  77.     dem++;
  78.     for (int i = 0; i < n; i++)
  79.     {
  80.         printf("%d ", A[i]);
  81.     }
  82.     printf("\n");
  83. }
  84. void nhap(int n, int A[])
  85. {
  86.     printf("Nhap lan luot cac phan tu cua mang !\n");
  87.     for (int i = 0; i < n; i++)
  88.     {
  89.         scanf("%d", &A[i]);
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement