Специальная сортировка массива - C (СИ)
Формулировка задачи:
Дан числовой массив размера N. Наименьший из элементов
массива поместить на первое место в массиве, наименьший из
оставшихся — на последнее место, следующий по величине — на
второе место, следующий — на предпоследнее, и так далее, до
середины массива.
Написала следующее, но программа не всегда работает верно, помогите исправить
#include<stdio.h> #include<stdlib.h> #include<Windows.h> #include<locale.h> #include<time.h> int random(int N) { return rand() % N; } void main() { setlocale(LC_ALL, "russian"); int N; int f; int x, y, min, min1, b, i, j; printf("Введите размер массива:"); scanf("%d", &N); int *A = new int[N]; do { printf("Для ввода элементов случайным образом нажмите 0, для заполнения самостоятельно нажмите 1\n"); scanf("%d", &f); } while (f >= 2); x = 0; y = N - 1; if (f == 0) { srand(clock()); for (i = 0; i < N; i++) { A[i] = 0 + rand() % 10; } } else if (f == 1) { printf("Введите %d элементов массива A:\n", N); for (i = 0; i < N; i++) { printf("A[%d]=", i); scanf("%d", &A[i]); } } printf("Исходный массив А:\n"); for (i = 0; i < N; i++) { printf("%d", A[i]); printf("\n"); } for (i = 0; i < N; i++) { min = A[x]; min1 = A[y]; for (j = x; j < y; j++) { if (A[j] < min) { min = A[j]; b = A[x]; A[x] = min; A[j] = b; } } x++; for (j = x; j < y; j++) { if (A[j] < min1) { min1 = A[j]; b = A[y]; A[y] = min1; A[j] = b; } } y--; } printf("Новый массив:\n"); for (i = 0; i < N; i++) printf("%d\n", A[i]); system("pause"); }
Решение задачи: «Специальная сортировка массива»
textual
Листинг программы
min_j = x; // индекс минимального элемента for (j = x+1; j < y; j++)//ищем первое минимальное значение { if (A[j] < A[min_j]) { min_j = j; } } b = A[x]; A[x] = A[min_j]; A[min_j] = b; x++;//двигаемся к центру массива с левого края
Объяснение кода листинга программы
- Инициализируется переменная
min_j
значениемx
- это индекс элемента, который в данный момент считается минимальным. - Запускается цикл
for
, который начинается сx+1
и продолжается доy
, пропускаяx
(так как мы уже знаем, что элемент с индексомx
минимальный). В каждой итерации цикла проверяется, является ли текущий элемент меньше, чем элемент с индексомmin_j
. Если это так, то обновляется значениеmin_j
. - После завершения цикла, в переменной
min_j
хранится индекс минимального элемента. - Значение элемента с индексом
x
копируется в переменнуюb
. - Значение в
b
заменяется значением элемента с индексомmin_j
. - Значение элемента с индексом
min_j
заменяется значением из переменнойb
. - Переменная
x
увеличивается на 1, перемещаясь к следующему элементу слева от центрального.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д