Ну, существуют некоторые случаи, Вы должны использовать их, как то, когда необходимо соединить с той же таблицей дважды в одном запросе.
Это также зависит от того, есть ли у Вас уникальные имена столбцов через таблицы. В нашей унаследованной базе данных у нас есть префиксы с 3 буквами для всех столбцов, происходя от сокращенной формы от таблицы, просто потому что одна древняя система баз данных, с которой мы были однажды совместимы, не поддерживала псевдонимы таблицы все настолько хорошо.
, Если у Вас есть имена столбцов, которые происходят больше чем в одной таблице, определяя имя таблицы как часть ссылки столбца, необходимость, и таким образом псевдоним таблицы будет допускать более короткий синтаксис.
qsort ()
- это функция, которую вы ищете. Вы вызываете его с помощью указателя на свой массив данных, количество элементов в этом массиве, размер каждого элемента и функция сравнения.
Он творит чудеса, и ваш массив сортируется на месте. Пример ниже:
#include <stdio.h>
#include <stdlib.h>
int comp (const void * elem1, const void * elem2)
{
int f = *((int*)elem1);
int s = *((int*)elem2);
if (f > s) return 1;
if (f < s) return -1;
return 0;
}
int main(int argc, char* argv[])
{
int x[] = {4,5,2,3,1,0,9,8,6,7};
qsort (x, sizeof(x)/sizeof(*x), sizeof(*x), comp);
for (int i = 0 ; i < 10 ; i++)
printf ("%d ", x[i]);
return 0;
}
Стандартная библиотека C / C ++
содержит функцию qsort
.
Это не лучшая реализация быстрой сортировки в мире, но она достаточно быстрая и ОЧЕНЬ ЛЕГКО в использовании ... формальный синтаксис qsort:
qsort(<arrayname>,<size>,sizeof(<elementsize>),compare_function);
Единственное, что вам нужно реализовать, это compare_function, которая принимает два аргументы типа "const void", которые можно привести к соответствующей структуре данных, а затем вернуть одно из этих трех значений:
1. Сравнение списка целых чисел :
просто приведите a и b к целым числам
если x
xy
отрицательно, x == y
, xy = 0
, x> y
], xy
положительно
xy
- это быстрый способ сделать это :)
Обратный * x - * y
в * y - * x
для сортировки в порядке убывания / обратного
int compare_function(const void *a,const void *b) {
int *x = (int *) a;
int *y = (int *) b;
return *x - *y;
}
2. Сравнение списка строк :
Для сравнения строк вам понадобится функция strcmp
внутри
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;
}
Конечно: qsort ()
- это реализация сортировки (не обязательно быстрой сортировки, как следует из ее названия).
Попробуйте man 3 qsort или прочтите на http://linux.die.net/man/3/qsort
В stdlib.h
доступно несколько функций сортировки C. Вы можете выполнить man 3 qsort
на машине unix, чтобы получить их список, но они включают:
Используйте qsort ()
в
.
@paxdiablo
Функция qsort ()
соответствует ISO / IEC 9899: 1990 («ISO C90»).