Работает немного не так - 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;
}