qsort
Выполняет быструю сортировку. Доступна более безопасная версия этой функции; см. раздел qsort_s
.
Синтаксис
void qsort(
void *base,
size_t number,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
Параметры
base
Начало целевого массива.
number
Размер массива в элементах.
width
Размер элементов в байтах.
compare
Указатель на пользовательскую подпрограмму, которая сравнивает два элемента массива и возвращает значение, показывающее, как соотносятся их значения.
Замечания
Функция qsort
реализует алгоритм быстрой сортировки для сортировки массива из number
элементов, каждый из которых имеет размер width
байт. Аргумент base
является указателем на начало сортируемого массива. Функция qsort
перезаписывает этот массив с использованием отсортированных элементов.
Во время сортировки функция qsort
вызывает подпрограмму compare
один или несколько раз и передает указатели на два элемента массива при каждом вызове. Если compare
указывает, что два элемента одинаковы, их порядок в результирующем отсортированном массиве не указан.
compare(const void *elem1, const void *elem2);
Подпрограмма сравнивает элементы и возвращает одно из следующих значений.
Сравнение возвращаемого значения функции | Description |
---|---|
< 0 | elem1 меньше elem2 |
0 | elem1 эквивалентен elem2 |
> 0 | elem1 больше elem2 |
Массив сортируется по возрастанию, как определено функцией сравнения. Для сортировки массива по убыванию измените смысл значений "больше" и "меньше" на противоположный в функции сравнения.
Эта функция проверяет свои параметры. Если compare
или number
имеет NULL
значение , или base
если он number
NULL
ненулевой или width
меньше нуля, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение разрешено продолжать, функция возвращается и errno
имеет значение EINVAL
.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
qsort |
<stdlib.h> и <search.h> . |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_qsort.c
// arguments: every good boy deserves favor
/* This program reads the command-line
* parameters and uses qsort to sort them. It
* then displays the sorted arguments.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int compare( const void *arg1, const void *arg2 );
int main( int argc, char **argv )
{
int i;
/* Eliminate argv[0] from sort: */
argv++;
argc--;
/* Sort remaining args using Quicksort algorithm: */
qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );
/* Output sorted list: */
for( i = 0; i < argc; ++i )
printf( " %s", argv[i] );
printf( "\n" );
}
int compare( const void *arg1, const void *arg2 )
{
/* Compare all of both strings: */
return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}
boy deserves every favor good