Специальная сортировка массива - 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, перемещаясь к следующему элементу слева от центрального.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д