zoukankan      html  css  js  c++  java
  • 在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.
    ", *pItem);
        else
            printf ("%d is not in the array.
    ", 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("排序之前的列表:
    ");
        for ( n = 0 ; n < 5; n++ )
        {
            printf("%d ", values[n]);
        }
    
        qsort(values, 5, sizeof(int), cmpfunc);
    
        printf("
    排序之后的列表:
    ");
        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;
    }
  • 相关阅读:
    poj 3280 Cheapest Palindrome(区间DP)
    POJ 2392 Space Elevator(多重背包)
    HDU 1285 定比赛名次(拓扑排序)
    HDU 2680 Choose the best route(最短路)
    hdu 2899 Strange fuction (三分)
    HDU 4540 威威猫系列故事――打地鼠(DP)
    HDU 3485 Count 101(递推)
    POJ 1315 Don't Get Rooked(dfs)
    脱离eclipse,手动写一个servlet
    解析xml,几种方式
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007379.html
Copyright © 2011-2022 走看看