⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 search.texi

📁 一个C源代码分析器
💻 TEXI
字号:
@node Searching and Sorting, Pattern Matching, Locales, Top@chapter Searching and Sorting This chapter describes functions for searching and sorting arrays ofarbitrary objects.  You pass the appropriate comparison function to beapplied as an argument, along with the size of the objects in the arrayand the total number of elements.@menu* Comparison Functions::        Defining how to compare two objects.				 Since the sort and search facilities                                 are general, you have to specify the                                 ordering. * Array Search Function::       The @code{bsearch} function.* Array Sort Function::         The @code{qsort} function.* Search/Sort Example::         An example program.@end menu@node Comparison Functions, Array Search Function,  , Searching and Sorting@section Defining the Comparison Function@cindex Comparison FunctionIn order to use the sorted array library functions, you have to describehow to compare the elements of the array.To do this, you supply a comparison function to compare two elements ofthe array.  The library will call this function, passing as argumentspointers to two array elements to be compared.  Your comparison functionshould return a value the way @code{strcmp} (@pxref{String/ArrayComparison}) does: negative if the first argument is ``less'' than thesecond, zero if they are ``equal'', and positive if the first argumentis ``greater''.Here is an example of a comparison function which works with an array ofnumbers of type @code{double}:@smallexampleintcompare_doubles (const double *a, const double *b)@{  return (int) (*a - *b);@}@end smallexampleThe header file @file{stdlib.h} defines a name for the data type ofcomparison functions.  This type is a GNU extension.@comment stdlib.h@comment GNU@tindex comparison_fn_t@smallexampleint comparison_fn_t (const void *, const void *);@end smallexample@node Array Search Function, Array Sort Function, Comparison Functions, Searching and Sorting@section Array Search Function@cindex search function (for arrays)@cindex binary search function (for arrays)@cindex array search functionTo search a sorted array for an element matching the key, use the@code{bsearch} function.  The prototype for this function is inthe header file @file{stdlib.h}.@pindex stdlib.h@comment stdlib.h@comment ANSI@deftypefun {void *} bsearch (const void *@var{key}, const void *@var{array}, size_t @var{count}, size_t @var{size}, comparison_fn_t @var{compare})The @code{bsearch} function searches the sorted array @var{array} for an objectthat is equivalent to @var{key}.  The array contains @var{count} elements,each of which is of size @var{size} bytes.  The @var{compare} function is used to perform the comparison.  Thisfunction is called with two pointer arguments and should return aninteger less than, equal to, or greater than zero corresponding towhether its first argument is considered less than, equal to, or greaterthan its second argument.  The elements of the @var{array} must alreadybe sorted in ascending order according to this comparison function.The return value is a pointer to the matching array element, or a nullpointer if no match is found.  If the array contains more than one elementthat matches, the one that is returned is unspecified.This function derives its name from the fact that it is implementedusing the binary search algorithm.@end deftypefun@node Array Sort Function, Search/Sort Example, Array Search Function, Searching and Sorting@section Array Sort Function@cindex sort function (for arrays)@cindex quick sort function (for arrays)@cindex array sort functionTo sort an array using an arbitrary comparison function, use the@code{qsort} function.  The prototype for this function is in@file{stdlib.h}.@pindex stdlib.h@comment stdlib.h@comment ANSI@deftypefun void qsort (void *@var{array}, size_t @var{count}, size_t @var{size}, comparison_fn_t @var{compare})The @var{qsort} function sorts the array @var{array}.  The array contains@var{count} elements, each of which is of size @var{size}.The @var{compare} function is used to perform the comparison on thearray elements.  This function is called with two pointer arguments andshould return an integer less than, equal to, or greater than zerocorresponding to whether its first argument is considered less than,equal to, or greater than its second argument.@cindex stable sorting@strong{Warning:} If two objects compare as equal, their order aftersorting is unpredictable.  That is to say, the sorting is not stable.This can make a difference when the comparison considers only part ofthe elements.  Two elements with the same sort key may differ in otherrespects.If you want the effect of a stable sort, you can get this result bywriting the comparison function so that, lacking other reasondistinguish between two elements, it compares them by their addresses.Note that doing this may make the sorting algorithm less efficient, sodo it only if necessary.Here is a simple example of sorting an array of doubles in numericalorder, using the comparison function defined above (@pxref{ComparisonFunctions}):@smallexample@{  double *array;  int size;  @dots{}  qsort (array, size, sizeof (double), compare_doubles);@}@end smallexampleThe @code{qsort} function derives its name from the fact that it wasoriginally implemented using the ``quick sort'' algorithm.@end deftypefun@node Search/Sort Example,  , Array Sort Function, Searching and Sorting@section Searching and Sorting ExampleHere is an example showing the use of @code{qsort} and @code{bsearch}with an array of structures.  The objects in the array are sortedby comparing their @code{name} fields with the @code{strcmp} function.Then, we can look up individual objects based on their names.@comment This example is dedicated to the memory of Jim Henson.  RIP.@smallexample@include search.c.texi@end smallexample@cindex Kermit the frogThe output from this program looks like:@smallexampleKermit, the frogPiggy, the pigGonzo, the whateverFozzie, the bearSam, the eagleRobin, the frogAnimal, the animalCamilla, the chickenSweetums, the monsterDr. Strangepork, the pigLink Hogthrob, the pigZoot, the humanDr. Bunsen Honeydew, the humanBeaker, the humanSwedish Chef, the humanAnimal, the animalBeaker, the humanCamilla, the chickenDr. Bunsen Honeydew, the humanDr. Strangepork, the pigFozzie, the bearGonzo, the whateverKermit, the frogLink Hogthrob, the pigPiggy, the pigRobin, the frogSam, the eagleSwedish Chef, the humanSweetums, the monsterZoot, the humanKermit, the frogGonzo, the whateverCouldn't find Janice.@end smallexample

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -