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