Advertisement
Guest User

qqqq

a guest
Oct 16th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.08 KB | None | 0 0
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. void print_array(int* a,int n);
  6. void init_array(int *a,int n);
  7. int max_array(int *a, int n);
  8. int min_array(int *a, int n);
  9. void scan_array(int *a, int n);
  10. void bubble_sort(int *a, int n);
  11. void bubble_sort2(int *a, int n);
  12. void selection_sort(int *a,int n);
  13. void selection_sort2(int *a,int n);
  14. void vstavkami_sort(int *a, int n);
  15. void shift (int *a, int start, int end);
  16. int position_search(int *a, int n, int value);
  17.  
  18. int main() { //генератор случайных чисел
  19.     int n;
  20.     printf("размер массива:\n");
  21.     scanf("%d",&n);
  22.     srand(123456);
  23.     srand(time(NULL)); //возвращает колличесво секунд с нового года 1970 года
  24.     int a[n];
  25.    
  26.     //scan_array(a,n);
  27.     init_array(a,n);
  28.     print_array(a,n);
  29.     printf ("MAX значение:%d\n",max_array(a,n));
  30.     printf ("MIN значение:%d\n",min_array(a,n));
  31.     bubble_sort(a,n);
  32.     bubble_sort2(a,n);
  33.     selection_sort(a,n);
  34.     print_array(a,n);
  35.     selection_sort2(a,n);
  36.     print_array(a,n);
  37.     return 0;
  38. }
  39.  
  40. void print_array(int *a,int n){
  41.     for(int i = 0;i<n;i++){
  42.         printf("%d\t",a[i]);
  43.     }
  44.     printf("\n");
  45. }
  46.  
  47.  
  48. void init_array(int *a,int n)
  49. {
  50.     for(int i=0;i < n;i++)
  51.     {
  52.         a[i] = rand() % 100; //(-50) смещает интервал на 50 влево
  53.     }
  54. }
  55.  
  56. void scan_array(int *a,int n){
  57.     for (int z = 0; z < n;z++){
  58.         scanf("%d",&a[z]);
  59.     }
  60. }
  61.  
  62. int max_array(int *a, int n) {
  63.     int max = a[0] ;
  64.     for (int j = 1; j < n;j++){
  65.             if( max < a[j]){
  66.                 max = a[j];
  67.             }
  68.     }
  69.     return max;
  70. }
  71.  
  72. int min_array(int *a, int n){
  73.     int min = a[0];
  74.     for (int j = 1; j < n;j++){
  75.         if( min > a[j]){
  76.             min = a[j];
  77.         }
  78.     }
  79.     return min;
  80. }
  81.  
  82. void swap(int *a, int *b) {
  83.     int temp =*b;
  84.     *b = *a;
  85.     *a = temp;
  86. }
  87.  
  88. void bubble_sort(int *a, int n){
  89.     int flag = 1;
  90. for (int z = 0; z < n - 1; z ++){
  91.     flag = 1;
  92.     for (int j  = 0; j < n - z- 1; j++ ){
  93.         if(a[j] > a[j + 1]) {
  94.             swap(a + j, a + j + 1);
  95.             flag = 0;
  96.         }
  97.     }
  98.     if (flag == 1) {
  99.         break;
  100.     }
  101. printf("Отсортированный Массив:\n");
  102. for(int f = 0;f < n;f++){
  103.     printf("%d\t",a[f]);
  104. }
  105.     printf("\n");
  106. getchar();
  107. }
  108. }
  109.  
  110. void bubble_sort2(int *a, int n){
  111.     int flag = 1;
  112.     for (int j  = 0; j < n - 1; j++ ){
  113.         if(a[j] > a[j + 1]) {
  114.             swap(a + j, a + j + 1);
  115.             flag = 0;
  116.         }
  117.     }
  118.     if (!flag) bubble_sort2(a, n - 1);
  119. }
  120.  
  121.  
  122. void selection_sort(int *a,int n){
  123.     for (int i = 0; i < n - 1;i++){
  124.         int min_index = min_array(a + i,n - i); // можно сказать что просто сдвигаем левую границу массива
  125.         swap(a + i,a + i + min_index);
  126.     }
  127.     printf("Отсортированный Массив c вставками:\n");
  128.     for(int f = 0;f < n;f++){
  129.         printf("%d\t",a[f]);
  130.     }
  131.     printf("\n");
  132.     getchar();
  133. }
  134.  
  135. void selection_sort2(int *a,int n) {
  136.     int min_index= min_array(a,n);
  137.     swap (a, a + min_index);
  138.     if (n > 2){
  139.         selection_sort2(a + 1,n - 1);
  140.     }
  141.     printf("Отсортированный Массив вставками с рекурсией:\n");
  142.     for(int f = 0;f < n;f++){
  143.         printf("%d\t",a[f]);
  144.     }
  145.     printf("\n");
  146.     getchar();
  147. }
  148.  
  149. void shift(int *a, int start, int end)
  150. {
  151.     int temp = a[end];
  152.     for(int i = end; i > start - 1;i++){
  153.        // swap(a + i, a + i + 1);
  154.         //a[i + 1] = a[i];
  155.         a[i] = a[i - 1];
  156.     }
  157.     a[start] =temp;
  158.     return;
  159. }
  160.  
  161. void vstavkami_sort(int *a, int n){
  162.     for (int i = 1; i < n; i++) {
  163.         if (a[i-1] > a[i]){
  164.         int position = position_search(a, i, a[i]);
  165.         shift(a,position, i);
  166.     }
  167. }
  168.     return;
  169. }
  170.  
  171.  
  172. int position_search(int *a, int n, int value){
  173.     for (int i = 0; i < n; i++){
  174.         if (a[i] > value) {
  175.             return i;
  176.         }
  177.     } return n - 1;
  178.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement