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 если он numberNULL ненулевой или 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

См. также

Поиск и сортировка
bsearch
_lsearch