Специальная сортировка массива - 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, перемещаясь к следующему элементу слева от центрального.