Блинная сортировка (является этот код им, если нет исправьте) - C (СИ)

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

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

Листинг программы
  1. #include <stdio.h>
  2. void flip(int *data, int m, int n)
  3. {
  4. int swap, i;
  5. for (i = m; i < --n; i++)
  6. {
  7. swap = data[i];
  8. data[i] = data[n];
  9. data[n] = swap;
  10. }
  11. }
  12. int main()
  13. {
  14. int i, j, a, max, moves = 0, length, data[100];
  15. printf("Input length: ");
  16. scanf_s("%d", &length);
  17. printf("Input numbers:\n");
  18. if (length < 2)гЂЂ
  19. return 0;
  20. for (j = 0; j < length; j++)
  21. {
  22. scanf_s("%d", &data[j]);
  23. }
  24. for (i = length; i > 1; i--)гЂЂ
  25. {
  26. max = 0;
  27. for (a = 0; a < i; a++)
  28. {
  29. if (data[a] > data[max])
  30. max = a;
  31. }
  32. if (max == (i - 1))гЂЂ
  33. continue;
  34.  
  35. if (max >= 0)
  36. {
  37. flip(data, max, i);
  38. moves++;
  39. }
  40. }
  41. for (j = 0; j < length; j++)
  42. {
  43. printf("%d ", data[j]);
  44. }
  45. printf("\nFlip: %d ", moves);
  46. scanf_s("%d", &length);гЂЂ
  47. return moves;
  48. }
прочитал в хабрахаб об блинной сортировке, попробовал написать показал преподу говорит неправильно, ибо есть действия нарушаюшую условия сортировки (вроде нельзя замену переменных, как в пузырьке)

Решение задачи: «Блинная сортировка (является этот код им, если нет исправьте)»

textual
Листинг программы
  1. #define MAXLEN  100
  2. void pancake_sort(int *arr, int size)
  3. {
  4.     for (int i = size - 1; i >= 0; --i)
  5.     {
  6.         int pos = i;
  7.         // Find position of max number between beginning and i
  8.         for (int j = 0; j < i - 1; j++)
  9.         {
  10.             if (arr[j] > arr[pos])
  11.             {
  12.                 pos = j;
  13.             }
  14.         }
  15.  
  16.         // is it in the correct position already?
  17.         if (pos == i)
  18.         {
  19.             continue;
  20.         }
  21.  
  22.         // is it at the beginning of the array? If not flip array section so it is
  23.         if (pos != 0)
  24.         {
  25.             flip(arr, pos + 1);
  26.         }
  27.  
  28.         // Flip array section to get max number to correct position    
  29.         flip(arr, i + 1);
  30.     }
  31. }
  32.  
  33. void flip(int *arr, int n)
  34. {
  35.     printf("n: %d\n", n);
  36.     for (int i = 0; i < n; i++)
  37.     {
  38.         --n;
  39.         int tmp = arr[i];
  40.         arr[i] = arr[n];
  41.         arr[n] = tmp;
  42.     }
  43. }
  44. int main(void)
  45. {
  46.     int i, j, a, max, moves = 0, length, data[MAXLEN];
  47.  
  48.     printf("Input length: ");
  49.     scanf("%d", &length);
  50.     printf("Input numbers:\n");
  51.  
  52.     for (j = 0; j < length; j++)
  53.     {
  54.         scanf("%d", &data[j]);
  55.     }
  56.  
  57.     pancake_sort(data, length);
  58.  
  59.     for (j = 0; j < length; j++)
  60.     {
  61.         printf("%d ", data[j]);
  62.     }
  63.  
  64.     free(data);
  65.     return 0;
  66. }

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

  1. В функции pancake_sort происходит сортировка массива методом Блинная сортировка.
  2. Начинается с цикла, который проходит по всем элементам массива, начиная с последнего.
  3. В каждой итерации находится позиция максимального элемента в неотсортированной части массива.
  4. Если максимальный элемент уже находится в правильной позиции, то происходит переход к следующей итерации.
  5. Если максимальный элемент находится не в начале массива, то выполняется перестановка элементов, чтобы он оказался в начале.
  6. После этого выполняется перестановка элементов, чтобы максимальный элемент оказался на своей правильной позиции.
  7. В функции flip происходит перестановка элементов массива.
  8. В функции main происходит ввод длины массива и самих чисел для сортировки.
  9. Затем вызывается функция pancake_sort для сортировки введенных чисел.
  10. Выводится отсортированный массив.
  11. В конце программа возвращает 0, что означает успешное выполнение.

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


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

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

11   голосов , оценка 4.182 из 5

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

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

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