Блинная сортировка (является этот код им, если нет исправьте) - C (СИ)
Формулировка задачи:
#include <stdio.h> void flip(int *data, int m, int n) { int swap, i; for (i = m; i < --n; i++) { swap = data[i]; data[i] = data[n]; data[n] = swap; } } int main() { int i, j, a, max, moves = 0, length, data[100]; printf("Input length: "); scanf_s("%d", &length); printf("Input numbers:\n"); if (length < 2)гЂЂ return 0; for (j = 0; j < length; j++) { scanf_s("%d", &data[j]); } for (i = length; i > 1; i--)гЂЂ { max = 0; for (a = 0; a < i; a++) { if (data[a] > data[max]) max = a; } if (max == (i - 1))гЂЂ continue; if (max >= 0) { flip(data, max, i); moves++; } } for (j = 0; j < length; j++) { printf("%d ", data[j]); } printf("\nFlip: %d ", moves); scanf_s("%d", &length);гЂЂ return moves; }
Решение задачи: «Блинная сортировка (является этот код им, если нет исправьте)»
textual
Листинг программы
#define MAXLEN 100 void pancake_sort(int *arr, int size) { for (int i = size - 1; i >= 0; --i) { int pos = i; // Find position of max number between beginning and i for (int j = 0; j < i - 1; j++) { if (arr[j] > arr[pos]) { pos = j; } } // is it in the correct position already? if (pos == i) { continue; } // is it at the beginning of the array? If not flip array section so it is if (pos != 0) { flip(arr, pos + 1); } // Flip array section to get max number to correct position flip(arr, i + 1); } } void flip(int *arr, int n) { printf("n: %d\n", n); for (int i = 0; i < n; i++) { --n; int tmp = arr[i]; arr[i] = arr[n]; arr[n] = tmp; } } int main(void) { int i, j, a, max, moves = 0, length, data[MAXLEN]; printf("Input length: "); scanf("%d", &length); printf("Input numbers:\n"); for (j = 0; j < length; j++) { scanf("%d", &data[j]); } pancake_sort(data, length); for (j = 0; j < length; j++) { printf("%d ", data[j]); } free(data); return 0; }
Объяснение кода листинга программы
- В функции
pancake_sort
происходит сортировка массива методомБлинная сортировка
. - Начинается с цикла, который проходит по всем элементам массива, начиная с последнего.
- В каждой итерации находится позиция максимального элемента в неотсортированной части массива.
- Если максимальный элемент уже находится в правильной позиции, то происходит переход к следующей итерации.
- Если максимальный элемент находится не в начале массива, то выполняется перестановка элементов, чтобы он оказался в начале.
- После этого выполняется перестановка элементов, чтобы максимальный элемент оказался на своей правильной позиции.
- В функции
flip
происходит перестановка элементов массива. - В функции
main
происходит ввод длины массива и самих чисел для сортировки. - Затем вызывается функция
pancake_sort
для сортировки введенных чисел. - Выводится отсортированный массив.
- В конце программа возвращает 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д