Advertisement
Guest User

Untitled

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