C/C++

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

DA
Dima Abdullaev
104
#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;
}
Вячеслав Жануспаев
Вячеслав Жануспаев
80 682
Лучший ответ
Не знаю С++, но это вроде сортировка пузырьком. На Питоне с ней быстро справился...
Сергей Сивков
Сергей Сивков
51 003
Условие цикла j < n-i-1 тоже самое что и j < 0, цикл просто не работает
Беслан Исаев
Беслан Исаев
10 755
Си не поддерживает динамические массивы на уровне языка. Нужно либо задать массив на заведомо большее количество элементов ( int a[65536] ) либо сделать явный динамический массив через stdlib.h и malloc
Женя Лукин
Женя Лукин
4 779
Сергей Синяев Вы отстали от жизни на 22 года. Динамические массивы появились в языке C в стандарте 1999 года.

Похожие вопросы