IllegalArgumentException с шиной событий Отто в экземпляре фрагмента

Стандартная библиотека C / C ++ <stdlib.h> содержит функцию qsort.

Это не лучшая быстрая реализация сортировки в мире, но она достаточно быстро и ОЧЕНЬ ЛЕГКО для использования ... формальная Синтаксис qsort:

qsort(<arrayname>,<size>,sizeof(<elementsize>),compare_function);

Единственное, что вам нужно реализовать, это compare_function, который принимает два аргумента типа «const void», которые могут быть отнесены к соответствующей структуре данных, а затем верните одно из этих трех значений:

  • отрицательное, если a должно быть до b
  • 0, если a равно b
  • положительно, если a должно быть после b

1. Сравнивая список целых чисел:

просто выделяет a и b целые числа, если x < y, x-y отрицательный, x == y, x-y = 0, x > y, x-y положителен x-y - это короткий путь для этого: reverse *x - *y to *y - *x для сортировки в порядке убывания / обратного порядка

int compare_function(const void *a,const void *b) {
int *x = (int *) a;
int *y = (int *) b;
return *x - *y;
}

2. Сравнение списка строк:

Для сравнения строки вам нужна функция strcmp внутри <string.h> lib. strcmp будет по умолчанию возвращать -ve, 0, ve соответствующим образом ... сортировать в обратном порядке, просто отменить знак, возвращенный strcmp

#include <string.h>
int compare_function(const void *a,const void *b) {
return (strcmp((char *)a,(char *)b));
}

3. Сравнение чисел с плавающей запятой:

int compare_function(const void *a,const void *b) {
double *x = (double *) a;
double *y = (double *) b;
// return *x - *y; // this is WRONG...
if (*x < *y) return -1;
else if (*x > *y) return 1; return 0;
}

4. Сравнение записей на основе ключа:

Иногда вам нужно сортировать более сложные вещи, такие как запись. Вот простейший способ сделать это, используя библиотеку qsort.

typedef struct {
int key;
double value;
} the_record;

int compare_function(const void *a,const void *b) {
the_record *x = (the_record *) a;
the_record *y = (the_record *) b;
return x->key - y->key;
}
13
задан bjorncs 3 November 2013 в 14:07
поделиться