
C/C++
Почему не работает сортировка в обратном порядке?

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
typedef bool (*compare)(int a, int b);
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
#define SWAP(a, b) { int t = a; a = b; b = t; }
#define N 9
bool descending(int a, int b) {
return a < b;
}
bool ascending(int a, int b) {
return a > b;
}
void bubble(int* box, int len, compare cmp) {
int i, n;
do {
n = 0;
for (i = 1; i < len; ++i) {
if (cmp(box[i - 1], box[i])) {
SWAP(box[i - 1], box[i]);
n = i;
}
}
len = n;
} while (len);
}
int main(void) {
int x = 10, y = 99;
int a[N];
int i;
srand((unsigned)time(NULL));
system("chcp 1251 > nul");
puts("По возрастанию:");
for (i = 0; i < N; ++i) a[i] = RAND(x, y);
for (i = 0; i < N; ++i) printf("%3i", a[i]);
puts("");
bubble(a, N, ascending);
for (i = 0; i < N; ++i) printf("%3i", a[i]);
puts("\nПо убыванию:");
for (i = 0; i < N; ++i) a[i] = RAND(x, y);
for (i = 0; i < N; ++i) printf("%3i", a[i]);
puts("");
bubble(a, N, descending);
for (i = 0; i < N; ++i) printf("%3i", a[i]);
puts("");
system("pause > nul");
return 0;
}
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
typedef bool (*compare)(int a, int b);
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
#define SWAP(a, b) { int t = a; a = b; b = t; }
#define N 9
bool descending(int a, int b) {
return a < b;
}
bool ascending(int a, int b) {
return a > b;
}
void bubble(int* box, int len, compare cmp) {
int i, n;
do {
n = 0;
for (i = 1; i < len; ++i) {
if (cmp(box[i - 1], box[i])) {
SWAP(box[i - 1], box[i]);
n = i;
}
}
len = n;
} while (len);
}
int main(void) {
int x = 10, y = 99;
int a[N];
int i;
srand((unsigned)time(NULL));
system("chcp 1251 > nul");
puts("По возрастанию:");
for (i = 0; i < N; ++i) a[i] = RAND(x, y);
for (i = 0; i < N; ++i) printf("%3i", a[i]);
puts("");
bubble(a, N, ascending);
for (i = 0; i < N; ++i) printf("%3i", a[i]);
puts("\nПо убыванию:");
for (i = 0; i < N; ++i) a[i] = RAND(x, y);
for (i = 0; i < N; ++i) printf("%3i", a[i]);
puts("");
bubble(a, N, descending);
for (i = 0; i < N; ++i) printf("%3i", a[i]);
puts("");
system("pause > nul");
return 0;
}
Не знаю С++, но это вроде сортировка пузырьком. На Питоне с ней быстро справился...


Условие цикла j < n-i-1 тоже самое что и j < 0, цикл просто не работает
Си не поддерживает динамические массивы на уровне языка. Нужно либо задать массив на заведомо большее количество элементов ( int a[65536] ) либо сделать явный динамический массив через stdlib.h и malloc
Сергей Синяев
Вы отстали от жизни на 22 года. Динамические массивы появились в языке C в стандарте 1999 года.
Похожие вопросы
- Распечатать слова данного текста в обратном порядке c++ Надо переделать с помощью указателей
- Написать рекурсивную процедуру для записи натурального числа в обратном порядке
- Измерение времени на си. Почему-то скорость сортировки массива выводится со второго раза.. И еще надо измерить память
- Почему этот код не работает? Я только начал изучать программирование, не понимаю почему не работает игра в конце
- Почему не работает код?
- Функция Raznost - почему не работает? Меняются только 00 и 10 эл-ты исходного массива
- Ошибки в коде. Почему не работает и как сделать чтобы заработало ?
- Структуры на языке С++ Скажите пожалуйста, почему не работает программа ,и как её исправить?
- Подскажите почему не работает элементарнейший код на ардуино
- Сравнение скорости сортировки выбором и сортировки слиянием (SelectionSort vs MergeSort)