在stm32开发可以调用c标准库的排序和查找 qsort bsearch

在嵌入式开发中,可以使用c标准库自带的库函数,而不用自己去早*,qsort 和bsearch就是其中的两个比较好用的

二分法查找,前提是已经排序好的数据。下面的代码, 如果数据为排序,则要进行排序后,再查找。

/* bsearch example */
#include <stdio.h> /* printf */
#include <stdlib.h> /* qsort, bsearch, NULL */ int compareints (const void *a, const void *b)
{
return ( *(int *)a - * (int *)b );
} int values[] = { 50, 20, 60, 40, 10, 30 }; int main ()
{
int *pItem;
int key = 45;
qsort (values, 6, sizeof (int), compareints);
pItem = (int *) bsearch (&key, values, 6, sizeof (int), compareints);
if (pItem != NULL)
printf ("%d is in the array.\n", *pItem);
else
printf ("%d is not in the array.\n", key);
return 0;
}

快速排序

#include <stdio.h>
#include <stdlib.h> int values[] = { 88, 56, 100, 2, 25 }; int cmpfunc (const void *a, const void *b)
{
return ( *(int *)a - * (int *)b ); //升序
//return ( *(int *)a - * (int *)b ); //降序
} int main()
{
int n; printf("排序之前的列表:\n");
for ( n = 0 ; n < 5; n++ )
{
printf("%d ", values[n]);
} qsort(values, 5, sizeof(int), cmpfunc); printf("\n排序之后的列表:\n");
for ( n = 0 ; n < 5; n++ )
{
printf("%d ", values[n]);
} return (0);
}

比较函数需要特别注意~~~~

Pointer to a function that compares two elements.

This function is called repeatedly by qsort to compare two elements. It shall follow the following prototype:

 
int compar (const void* p1, const void* p2);
 

Taking two pointers as arguments (both converted to const void*). The function defines the order of the elements by returning (in a stable and transitive manner):

return value meaning
<0 The element pointed to by p1 goes before the element pointed to by p2
0 The element pointed to by p1 is equivalent to the element pointed to by p2
>0 The element pointed to by p1 goes after the element pointed to by p2

For types that can be compared using regular relational operators, a general compar function may look like:

1
2
3
4
5
6
int compareMyType (const void * a, const void * b)
{
if ( *(MyType*)a < *(MyType*)b ) return -1;
if ( *(MyType*)a == *(MyType*)b ) return 0;
if ( *(MyType*)a > *(MyType*)b ) return 1;
}
上一篇:JAVA多态


下一篇:Solr初步学习