zoukankan      html  css  js  c++  java
  • qsort()与besearch()

    功 能: 使用快速排序例程进行排序
    头文件:stdlib.h
    用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
    参数: 1 待排序数组首地址
             2 数组中待排序元素数量
             3 各元素的占用空间大小
             4 指向函数的指针,用于确定排序的顺序
     
    使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷。
    qsort 的函数原型是void __cdecl qsort (void *base,size_tnum,size_t width,int (__cdecl *comp)(const void *,const void*))
    其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数。
    比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。
    qsort(a,1000,sizeof(int),comp);
    其中comp函数应写为:
    1 intcomp(const void *a,const void *b)
    2 {
    3    return*(int*)a-*(int*)b;
    4 }
    对一个二维数组进行排序:
    int a[1000][2]; 其中按照a[0]的大小进行一个整体的排序,其中a[1]必须和a[0]一起移动交换。//即第一行和第二行(a[0]和a[1]分别代表第一行和第二行的首地址
    1 qsort(a,1000,sizeof(int)*2,comp);
    2  
    3 int comp(const void *a,const void *b)
    4  
    5 {
    6    return(*(int*)a)[0]-(*(int*)b)[0];
    7 }
    用 法: void *bsearch(const void *key, const void *base, size_t nelem, size_t width, int(*fcmp)(const void *, const *));
    语法:#include <stdlib.h>    
           void *bsearch( const void *key, const void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );
    参数:第一个:要查找的关键字。
            第二个:要查找的数组。
            第三个:指定数组中元素的数目。
            第四个:每个元素的长度(以字符为单位)。
            第五个:指向比较函数的指针。
    功能: 函数用折半查找法在从数组元素buf[0]到buf[num-1] 匹配参数key。
             如果函数compare 的第一个参数小于第二个参数,返回负值;如果等于返回零值;如果大于返回正值。
             数组buf 中的元素应以升序排列。
             函数bsearch()的返回值是指向匹配项,如果没有发现匹配项,返回NULL
  • 相关阅读:
    php 计算两个日期相差天数
    Linux系统查找清理磁盘大文件
    虚拟机重启网络服务失败,当查看状态显示错误Failed to start LSB......
    c++简单编写线性表(实验)
    学校的c++程序课程设计(简单的写法 并无太多c++的特色)
    C语言简单实现链栈基本几个功能
    简单用数组模拟顺序栈(c++)
    详细易懂的二叉树遍历(先中后)
    大数加法之C语言函数法(只有正数版)
    有关Java垃圾回收的几个问题
  • 原文地址:https://www.cnblogs.com/sage-blog/p/3896764.html
Copyright © 2011-2022 走看看