• 在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;
    }
  • 相关阅读:
    Git 如何优雅地回退代码?
    如何让自己的技能变现?
    读了100本书,总结出读遍万卷书的 7 大方法
    08月10日总结
    08月09日总结
    08月08日总结
    08月06日总结
    08月04日总结
    08月03日总结
    剑指offer52 两个链表的第一个公共节点
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007379.html
Copyright © 2020-2023  润新知