Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.05 KB | None | 0 0
  1. #include <stdio.h>
  2. // Функция Шейкер-сортировки
  3. void shekerSort(double *mass, int count)
  4. {
  5.   int left = 0, right = count - 1; // левая и правая границы сортируемой области массива
  6.   int flag = 1;  // флаг наличия перемещений
  7.   // Выполнение цикла пока левая граница не сомкнётся с правой
  8.   // или пока в массиве имеются перемещения
  9.   while ((left < right) && flag > 0)
  10.   {
  11.     flag = 0;
  12.     for (int i = left; i<right; i++)  //двигаемся слева направо
  13.     {
  14.       if (mass[i]>mass[i + 1]) // если следующий элемент меньше текущего,
  15.       {             // меняем их местами
  16.         double t = mass[i];
  17.         mass[i] = mass[i + 1];
  18.         mass[i + 1] = t;
  19.         flag = 1;      // перемещения в этом цикле были
  20.       }
  21.     }
  22.     right--; // сдвигаем правую границу на предыдущий элемент
  23.     for (int i = right; i>left; i--)  //двигаемся справа налево
  24.     {
  25.       if (mass[i - 1]>mass[i]) // если предыдущий элемент больше текущего,
  26.       {            // меняем их местами
  27.         double t = mass[i];
  28.         mass[i] = mass[i - 1];
  29.         mass[i - 1] = t;
  30.         flag = 1;    // перемещения в этом цикле были
  31.       }
  32.     }
  33.     left++; // сдвигаем левую границу на следующий элемент
  34.   }
  35. }
  36. int main() {
  37.   double m[10];
  38.   // Вводим элементы массива
  39.   for (int i = 0; i<10; i++) {
  40.     printf("m[%d]=", i);
  41.     scanf("%lf", &m[i]);
  42.   }
  43.   shekerSort(m, 10); // вызываем функцию сортировки
  44.   // Выводим отсортированные элементы массива
  45.   for (int i = 0; i<10; i++)
  46.     printf("%.2lf ", m[i]);
  47.   getchar(); getchar();
  48.   return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement