Advertisement
Hanaigi

Untitled

Feb 28th, 2024
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.41 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4.  
  5. int i, M = 0, C = 0;
  6.  
  7. void FillInc(int A[], int n) {
  8.     for (i = 0; i < n; i++) {
  9.         A[i] = i + 1;
  10.     }
  11. }
  12.  
  13. void FillDec(int A[], int n) {
  14.     for (i = 0; i < n; i++) {
  15.         A[i] = n - i;
  16.     }
  17. }
  18.  
  19. void FillRand(int A[], int n) {
  20.     srand(time(NULL));
  21.     for (i = 0; i < n; i++) {
  22.         A[i] = rand() % n;
  23.     }
  24. }
  25.  
  26.  
  27. void PrintMas(int A[], int n) {
  28.     for (i = 0; i < n; i++) {
  29.         printf("%d ", A[i]);
  30.     }
  31. }
  32.  
  33. void SelectSort(int A[], int n)
  34. {
  35.     M = 0, C = 0;
  36.     int i,j,k,t;
  37.     for (i = 0; i < n-1; i++ ) {
  38.         k = i;
  39.         for( j=i+1; j<n; j++){
  40.             C++;
  41.             if (A[j]<A[k])k=j;
  42.         }
  43.         t=A[i];
  44.         A[i]=A[k];
  45.         A[k]=t;
  46.         M+=3;
  47.     }
  48. }
  49.  
  50. void BubbleSort(int A[], int n) {
  51.     int j, min, temp;
  52.     M = 0; C = 0;
  53.     for (i = 0; i < n - 1; i++) {
  54.         for (j = n - 1; j > i; j--) {
  55.             C += 1;
  56.             if (A[j] < A[j - 1]) {
  57.                 temp = A[j];
  58.                 A[j] = A[j - 1];
  59.                 A[j - 1] = temp;
  60.                 M += 3;
  61.             }
  62.         }
  63.     }
  64. }
  65. void ShakerSort(int A[], int n) {
  66.  M = 0, C = 0;
  67.  int left,right,i,j,k,w;
  68.  left=0;
  69.  right=n-1;
  70.  k=n-1;
  71.  do {
  72.   for(j = right; j > left; j-- ){
  73.    C ++;
  74.    if (A[j] < A[j-1]) {
  75.     w = A[j];
  76.        A[j] = A[j-1];
  77.       A[j-1] = w;
  78.        k = j;
  79.        M += 3;
  80.    }
  81.   }
  82.   left = k;
  83.   for(j = left; j < right; j++ ){
  84.    C ++;
  85.       if(A[j] > A[j+1]){
  86.        w = A[j];
  87.        A[j] = A[j+1];
  88.        A[j+1] = w;
  89.        k = j;
  90.        M +=3;
  91.    }
  92.   }
  93.   right = k;
  94.  }
  95.  while(left < right);
  96. }
  97. void InsertSort(int A[], int n) {
  98.     M = 0, C = 0;
  99.     int i,t,j;
  100.     for(i=1; i<n; i++) {
  101.         M++;
  102.         t=A[i];
  103.         j=i-1;
  104.         while(j>=0 && (C++, t<A[j])) {
  105.             M++;
  106.             A[j+1]=A[j];
  107.             j=j-1;
  108.         }
  109.         M++;
  110.         A[j+1]=t;
  111.     }
  112. }
  113.  
  114. int main() {
  115.     int n;
  116.     int w;
  117.  
  118.     n = 10;
  119.     int A[n];
  120.  
  121.     printf("Возрастающий массив: ");
  122.     FillInc(A, n);
  123.     PrintMas(A, n);
  124.  
  125.     printf("\n");
  126.     printf("Отсортированный массив: ");
  127.     InsertSort(A, n);
  128.     PrintMas(A, n);
  129.     printf("\n ");
  130.  
  131.     printf("\n");
  132.     printf("M = %d  C = %d", M, C);
  133.     printf("\n");
  134.     printf("M + C = %d", M + C);
  135.     printf("\n");
  136.  
  137.     printf("\n");
  138.     printf("Убывающий массив: ");
  139.     FillDec(A, n);
  140.     PrintMas(A, n);
  141.  
  142.     printf("\n");
  143.     printf("Отсортированный массив: ");
  144.     InsertSort(A, n);
  145.     PrintMas(A, n);
  146.     printf("\n");
  147.  
  148.     printf("\n");
  149.     printf("M = %d  C = %d", M, C);
  150.     printf("\n");
  151.     printf("M + C = %d", M + C);
  152.     printf("\n");
  153.  
  154.     printf("\n");
  155.     printf("Случайный массив: ");
  156.     FillRand(A, n);
  157.     PrintMas(A, n);
  158.  
  159.     printf("\n");
  160.     printf("Отсортированный массив: ");
  161.     InsertSort(A, n);
  162.     PrintMas(A, n);
  163.     printf("\n");
  164.  
  165.     printf("\n");
  166.     printf("M = %d  C = %d", M, C);
  167.     printf("\n");
  168.     printf("M + C = %d", M + C);
  169.     printf("\n\n------------------------------1 Table-------------------------------------------------------\n\n");
  170.  
  171.     for (n = 100; n < 501; n += 100) {
  172.         w = 2 * (n * n - n) / 2 + 2 * n - 2;
  173.         int B[n];
  174.         printf("N = %d", n);
  175.         printf(" | T = %d", w);
  176.         FillDec(B, n);
  177.         InsertSort(B, n);
  178.         printf(" | Dec: %d", M + C);
  179.         FillRand(B, n);
  180.         InsertSort(B, n);
  181.         printf(" | Rand: %d", M + C);
  182.         FillInc(B, n);
  183.         InsertSort(B, n);
  184.         printf(" | Inc: %d", M + C);
  185.         printf("\n\n");
  186.  
  187.     }
  188.     printf("---------------------------------------------------------------------------------------------------");
  189.     printf("\n\n------------------------------2 Table-------------------------------------------------------\n\n");
  190.     for (n = 100; n < 501; n += 100) {
  191.         int B[n];
  192.         printf("N = %d", n);
  193.         FillRand(B, n);
  194.         SelectSort(B, n);
  195.         printf(" | Select: %d", M + C);
  196.         FillRand(B, n);
  197.         BubbleSort(B, n);
  198.         printf(" | Bouble: %d", M + C);
  199.         FillRand(B, n);
  200.         ShakerSort(B, n);
  201.         printf(" | Shaker: %d", M + C);
  202.         FillRand(B, n);
  203.         InsertSort(B, n);
  204.         printf(" | Insert: %d", M + C);
  205.         printf("\n\n");
  206.  
  207.     }
  208.      printf("---------------------------------------------------------------------------------------------------");
  209.     return 0;
  210.  
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement