Работает немного не так - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть условие: массив из 20 элементов. Упорядочить его так, чтобы элементы на четных местах выводились в порядке возрастания, а на нечетных в порядке убывания. Использовать надо сортировку вставкой. Вот есть программа, но она выводит весь массив, упорядоченный в порядке убывания, хоть я вроде и прописала в условии "с четными индексами делаем так, а с нечетными этак." Кто скажет, где косяк?
#include "stdlib.h" 
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include <conio.h>
#include "time.h"
int a[20];
int i, j, n;
int tmp, pos;
int min, mod;
void sort()
{
    for (i = 0; i < 20; ++i)
    {
        mod = i % 2;
        if (mod == 0)
        {
            for (i = 0; i < 20; ++i)
            {
                pos = i;
                tmp = a[i];
                for (j = i + 1; j < 20; ++j)
                {
                    if (a[j] > tmp)
                    {
                        pos = j;
                        tmp = a[j];
                    }
                }
                a[pos] = a[i];
                a[i] = tmp;
            }
        }
        else
        { 
            for (i = 0; i < 20; ++i)
            {
                pos = i;
                tmp = a[i];
                for (j = i + 1; j < 20; ++j)
                {
                    if (a[j] < tmp)
                    {
                        pos = j;
                        tmp = a[j];
                    }
                }
                    a[pos] = a[i];
                    a[i] = tmp;
                
            }
        }
    }
 
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    srand(time(0));
    printf("Выберите способ ввода массива:\n");
    printf("1. C помощью ГСЧ\n");
    printf("2. Вручную\n");
    printf("Ваш выбор: ");
    int input;
    scanf("%d", &input);
    switch (input)
    {
    case 1:
        for (i = 0; i <20; i++)
        {
            a[i] = rand() % 10;
            printf("%d ", a[i]);
        }
        printf("\n");
        sort();
        for (i = 0; i < 20; i++)
            printf("%d ", a[i]);
        getch();
        break;
    case 2:
        for (i = 0; i < 20; i++)
            scanf("%d", &a[i]);
        sort();
        for (i = 0; i < 20; i++)
            printf("%d ", a[i]);
        getch();
        break;
        return 0;
    }
 
}

Решение задачи: «Работает немного не так»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define N 20
 
void InsertionSort(int *a, int x, int y, int even_odd)
{
    int i, j, t;
    for(i = even_odd; i < x; i += 2){
        t = a[i];
        if(y == 1)
            for(j = i - 2; (j >= 0) && (t <  a[j]); j -= 2)
                a[j + 2] = a[j];
        if(y == 2)
            for(j = i - 2; (j >= 0) && (t >  a[j]); j -= 2)
                a[j + 2] = a[j];
        a[j + 2] = t;
    }
}
int main()
{
    int a[N], i;
    for(i = 0; i < N; ++i)
        printf("%d ", a[i] = rand() % 30);
    InsertionSort(a, N, 1, 2);
    InsertionSort(a, N, 2, 3);
    puts("\nSorted array:");
    for(i = 0; i < N; ++i)
        printf("%d ", a[i]);
    return 0;
}

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


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

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

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