zoukankan      html  css  js  c++  java
  • 数据结构基础_二分法查找

    公共引用头文件common.h

    #include <stdio.h>
    #include <stdlib.h>
    
    
    /**
    *
    * @param p   待申请内存的指针
    * @param s   申请内存大小
    */
    #define MALLOC(p,s) \
    if(!((p) = malloc(s)) ){\
    	fprintf(stderr, "Insufficient memory");\
    	exit(EXIT_FAILURE);\
    }
    
    /**
    * 交换两个数  宏定义方式
    * @param x  交换数1
    * @param y  交换数2
    * @param t  临时变量
    */
    #define SWAP(x,y,t) ((t) = (x), (x) = (y), (y) = (t))
    
    void swap(int *x,int *y){
    	int temp = *x;
    	*x = *y;
    	*y =temp;
    }
    
    
    #define COMPARE(x, y) ( ((x) < (y)) ? -1 : ((x) == y) ? 0 : 1 )
    
    int compare(int x,int y){
    	if(x < y){
    		return -1;
    	}else if(x == y){
    		return 0;
    	}else{
    		return 1;
    	}
    }
    
    
    
    


    1.  一般方法

    #include "common.h"
    
    int binSearch(int list[], int searchNum, int left, int right){
    	int middle;
    	while(left <= right){
    		middle = (left + right) / 2;
    		switch(COMPARE(list[middle], searchNum)){
    		case -1:
    			left = middle + 1;
    			break;
    		case 0:
    			return middle;
    		case 1:
    			right = middle - 1;
    			break;
    		}
    	}
    	return -1;
    }
    
    
    int main(){
    	int list[] = {10,20,40,50,36,40,50,20};
    	int left = 0;
    	int right = 8;
    	int i;
    	int searchNum = 20;
    	int position;
    
    	printf("目标数组为\n");
    	for(i = 0; i < 8; i++) {
    		printf("%d ", list[i]);
    	}
    	position = binSearch(list, searchNum, left, right);
    	printf("\n%d在数组中的位置为第%d个", searchNum, position + 1);
    	return 0;
    }


    2.  递归方法

    int binSearch2(int list[], int searchNum, int left, int right){
    	int middle;
    	while(left <= right){
    		middle = (left + right) / 2;
    		switch(COMPARE(list[middle], searchNum)){
    		case -1:
    			return binSearch2(list, searchNum, middle + 1, right);
    		case 0:
    			return middle;
    		case 1:
                return binSearch2(list, searchNum, left, right - 1);
    		}
    	}
    	return -1;
    }


     


    作者:沙漏哟
    出处:计算机的未来在于连接
    本文版权归作者和博客园共有,欢迎转载,请留下原文链接
    微信随缘扩列,聊创业聊产品,偶尔搞搞技术
  • 相关阅读:
    linux主机安装配置chrony时间同步器
    LINUX正则表达式
    文件系统
    “好文章”链接-爬虫脚本
    优秀博客集
    负载均衡LVS(Linux Virtual Server)
    LNMP
    MySQL备份还原
    iptables--SNAT、DNAT实践
    MySQL 基础命令
  • 原文地址:https://www.cnblogs.com/yeahwell/p/5226022.html
Copyright © 2011-2022 走看看