Специальная сортировка массива - 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++;//двигаемся к центру массива с левого края

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

  1. Инициализируется переменная min_j значением x - это индекс элемента, который в данный момент считается минимальным.
  2. Запускается цикл for, который начинается с x+1 и продолжается до y, пропуская x (так как мы уже знаем, что элемент с индексом x минимальный). В каждой итерации цикла проверяется, является ли текущий элемент меньше, чем элемент с индексом min_j. Если это так, то обновляется значение min_j.
  3. После завершения цикла, в переменной min_j хранится индекс минимального элемента.
  4. Значение элемента с индексом x копируется в переменную b.
  5. Значение в b заменяется значением элемента с индексом min_j.
  6. Значение элемента с индексом min_j заменяется значением из переменной b.
  7. Переменная x увеличивается на 1, перемещаясь к следующему элементу слева от центрального.

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


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

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

10   голосов , оценка 3.5 из 5
Похожие ответы