Шейкерная сортировка одномерного массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть два массива. методом Шейкера отсортировать элементы первого массива, которых нет во втором. на языке Си. пример: 3 5 7 8 2 3 7 результат после сортировки: 3 2 7 5 8
аааааа.....быстрее.....пожалуйста......осталось 20 минут!!!!!!!!! зачет или не зачет....срочно!!!!!
......заплачууу......20$ закинуу на киви или веб-мани
осталось 15 минут.....

Решение задачи: «Шейкерная сортировка одномерного массива»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main(void)
  6. {
  7.     const int size1 = 5;
  8.     const int size2 = 2;
  9.     int arr1[size1];
  10.     int arr2[size2];
  11.  
  12.     srand(time(NULL));
  13.  
  14.     for (int i = 0; i < size1; i++)
  15.            arr1[i] = rand() % 100;
  16.  
  17.     for (int i = 0; i < size2; i++)
  18.            arr2[i] = arr1[rand() % size1];
  19.  
  20.     printf("a: ");
  21.     for (int i = 0; i < size1; i++)
  22.         printf ("%d ", arr1[i]);
  23.     printf("\n");
  24.     printf("b: ");
  25.     for (int i = 0; i < size2; i++)
  26.         printf ("%d ", arr2[i]);
  27.     printf("\n");
  28.     for (int left = 0, right = size1-1; left < right;)
  29.     {
  30.         for (int idx  = left, l_idx = -1, r_idx = -1; idx <= right; idx++)
  31.         {
  32.             int i;
  33.             for (i = 0; i < size2; i++)
  34.                 if (arr1[idx] == arr2[i]) break;
  35.             if (i == size2)
  36.                 if (l_idx == -1) l_idx = idx;
  37.                 else r_idx = idx;
  38.  
  39.             if ( (l_idx != -1) && (r_idx != -1)) {
  40.  
  41.                 if(arr1[r_idx] < arr1[l_idx]) {
  42.                     int tmp = arr1[l_idx];
  43.                     arr1[l_idx] = arr1[r_idx];
  44.                     arr1[r_idx] = tmp;
  45.                     idx = l_idx;
  46.                 } else {
  47.                     idx = r_idx;
  48.                     l_idx = r_idx;
  49.                 }
  50.                 r_idx = -1;
  51.             }
  52.         }
  53.         right--;
  54.         for (int idx = right, l_idx = -1, r_idx = -1; idx >= left; idx--)
  55.         {
  56.             int i;
  57.             for (i = 0; i < size2; i++)
  58.                 if (arr1[idx] == arr2[i]) break;
  59.             if (i == size2)
  60.                 if (r_idx == -1) r_idx = idx;
  61.                 else l_idx = idx;
  62.  
  63.             if ((l_idx != -1) && (r_idx != -1)) {
  64.  
  65.                 if  (arr1[l_idx] >  arr1[r_idx]) {
  66.                     int tmp = arr1[l_idx];
  67.                     arr1[l_idx] = arr1[r_idx];
  68.                     arr1[r_idx] = tmp;
  69.                     idx = r_idx;
  70.  
  71.                 } else {
  72.                     idx = l_idx;
  73.                     r_idx = l_idx;
  74.                    
  75.                 }
  76.                 l_idx = -1;
  77.             }
  78.         }
  79.         left++;
  80.     }
  81.     printf("a: ");
  82.     for (int i = 0; i < size1; i++)
  83.         printf ("%d ", arr1[i]);
  84.     printf("\n");
  85.  
  86.     return 0;
  87. }

Объяснение кода листинга программы

Код реализует алгоритм Шейкерной сортировки для одномерного массива. Список действий:

  1. Инициализация переменных:
    • объявление массивов arr1 и arr2;
    • задание размера массивов size1 и size2;
    • инициализация генератора случайных чисел srand(time(NULL));
    • заполнение массива arr1 случайными числами от 0 до 99;
    • заполнение массива arr2 элементами из arr1.
  2. Основной цикл сортировки:
    • перебираем элементы массива arr1, начиная с первого и до предпоследнего;
    • для каждого элемента:
    • находим его пары в arr2, перебирая все элементы массива arr2;
    • если пары нет, то элемент уже на своем месте;
    • если пары есть, и пара находится правее текущего элемента, то меняем элементы местами;
    • если пары есть, и пара находится левее текущего элемента, то меняем элементы местами и переворачиваем массив.
  3. Завершение сортировки:
    • выводим отсортированный массив arr1. Алгоритм называется Шейкерная сортировка, потому что он перетряхивает массив, сравнивая пары соседних элементов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы