Advertisement
Guest User

Untitled

a guest
Feb 21st, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.22 KB | None | 0 0
  1. // L1.cpp: определяет точку входа для консольного приложения.
  2. // ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
  3.  
  4. #include "stdafx.h"
  5. #include <cstdlib>
  6. #include <iostream>
  7.  
  8.  
  9. using namespace std;
  10.  
  11. void Fill_mas(int * a)
  12. {
  13.     for (int i = 0; i < 10; i++)// Задаем значения элементов массива
  14.         a[i] = rand() % 100;
  15. }
  16.  
  17. void Mas_out(int *a)
  18. {
  19.     for (int i = 0; i < 10; i++)// Выводим значения неотсортированных элементов массива
  20.         cout << a[i] << " ";
  21.     cout << endl;
  22. }
  23.  
  24. void Sort1(int *num, int size)
  25. {
  26.     //Сортировка пузырьком
  27.     // Для всех элементов
  28.     for (int i = 0; i < size - 1; i++)
  29.     {
  30.         for (int j = (size - 1); j > i; j--) // для всех элементов после i-ого
  31.         {
  32.             if (num[j - 1] > num[j]) // если текущий элемент меньше предыдущего
  33.             {
  34.                 int temp = num[j - 1];
  35.                 num[j - 1] = num[j];
  36.                 num[j] = temp;
  37.             }
  38.         }
  39.     }
  40.     for (int i = 0; i < 10; i++)
  41.         cout << num[i] << " ";
  42.     cout << endl;
  43. }
  44.  
  45. void Sort2(int *arrayPtr, int length) // сортировка вставками
  46. {
  47.     int temp, // временная переменная для хранения значения элемента сортируемого массива
  48.         item; // индекс предыдущего элемента
  49.     for (int counter = 1; counter < length; counter++)
  50.     {
  51.         temp = arrayPtr[counter]; // инициализируем временную переменную текущим значением элемента массива
  52.         item = counter - 1; // запоминаем индекс предыдущего элемента массива
  53.         while (item >= 0 && arrayPtr[item] > temp) // пока индекс не равен 0 и предыдущий элемент массива больше текущего
  54.         {
  55.             arrayPtr[item + 1] = arrayPtr[item]; // перестановка элементов массива
  56.             arrayPtr[item] = temp;
  57.             item--;
  58.         }
  59.     }
  60.     for (int i = 0; i < 10; i++)
  61.         cout << arrayPtr[i] << " ";
  62.     cout << endl;
  63. }
  64.  
  65. void Sort3(int* array_Ptr, int length_array) // сортировка выбором
  66. {
  67.     for (int repeat_counter = 0; repeat_counter < length_array; repeat_counter++)
  68.     {
  69.         int temp = array_Ptr[0]; // временная переменная для хранения значения перестановки
  70.         for (int element_counter = repeat_counter + 1; element_counter < length_array; element_counter++)
  71.         {
  72.             if (array_Ptr[repeat_counter] > array_Ptr[element_counter])
  73.             {
  74.                 temp = array_Ptr[repeat_counter];
  75.                 array_Ptr[repeat_counter] = array_Ptr[element_counter];
  76.                 array_Ptr[element_counter] = temp;
  77.             }
  78.         }
  79.     }
  80.     for (int i = 0; i < 10; i++)
  81.         cout << array_Ptr[i] << " ";
  82.     cout << endl;
  83. }
  84.  
  85. void Sort4(int *mas, int first, int last)
  86. {
  87.     int mid, count;
  88.     int f = first, l = last;
  89.     mid = mas[(f + l) / 2]; //вычисление опорного элемента
  90.     do
  91.     {
  92.         while (mas[f] < mid) f++;
  93.         while (mas[l] > mid) l--;
  94.         if (f <= l) //перестановка элементов
  95.         {
  96.             count = mas[f];
  97.             mas[f] = mas[l];
  98.             mas[l] = count;
  99.             f++;
  100.             l--;
  101.         }
  102.     } while (f < l);
  103.  
  104.     if (first < l) {
  105.         Sort4(mas, first, l);
  106.     }
  107.     if (f < last) {
  108.         Sort4(mas, f, last);
  109.     }
  110. }
  111.  
  112. void Sort5(int *A, int first, int last)
  113. {
  114.     int middle, start, final, j;
  115.     int *mas = new int[100];
  116.     middle = (first + last) / 2; //вычисление среднего элемента
  117.     start = first; //начало левой части
  118.     final = middle + 1; //начало правой части
  119.     for (j = first; j <= last; j++) //выполнять от начала до конца
  120.         if ((start <= middle) && ((final>last) || (A[start]<A[final])))
  121.         {
  122.             mas[j] = A[start];
  123.             start++;
  124.         }
  125.         else
  126.         {
  127.             mas[j] = A[final];
  128.             final++;
  129.         }
  130.     //возвращение результата в список
  131.     for (j = first; j <= last; j++) A[j] = mas[j];
  132.     delete[]mas;
  133.  
  134.  
  135. };
  136.  
  137. void Sort5_1(int *A, int first, int last) //рекурсивная процедура сортировки
  138. {
  139.     {
  140.         if (first<last)
  141.         {
  142.             Sort5_1(A, first, (first + last) / 2); //сортировка левой части
  143.             Sort5_1(A, (first + last) / 2 + 1, last); //сортировка правой части
  144.             Sort5(A, first, last); //слияние двух частей
  145.         }
  146.     }
  147.  
  148. }
  149.  
  150.  
  151. int main()
  152. {
  153.     int a[10]; // Объявляем массив из 10 элементов
  154.  
  155.     Fill_mas(a);
  156.  
  157.     Mas_out(a);
  158.  
  159.     Sort1(a, 10);  // вызываем функцию сортировки пузырьком
  160.     Fill_mas(a);
  161.  
  162.     Sort2(a, 10); // вызываем функцию сортировки вставками
  163.     Fill_mas(a);
  164.  
  165.     Sort3(a, 10);  // вызываем функцию сортировки выбором
  166.     Fill_mas(a);
  167.    
  168.     Sort4(a, 0, 9);  // вызываем функцию быстрой сортировки
  169.     Mas_out(a);
  170.     Fill_mas(a);
  171.  
  172.     Sort5_1(a, 0, 9);  // вызываем функцию сортировки слияниями
  173.     Mas_out(a);
  174.     Fill_mas(a);
  175.  
  176.     system("pause");
  177.  
  178.     return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement