查找——二分查找法

// A code block

 1. 二分查找法
 2. 偶数前奇数后
// An highlighted block
#include<stdio.h>
#include<stdlib.h>
///在时间复杂度为O(n)的情况下,把数组中的数分为左为偶数,右为奇数
void OddAndDou(int data[],int length){

    for (int i = 0,j=length-1; i < j;)
    {
        if(data[i]%2!=0&&data[j]%2!=0)
            i++;
        else if(data[i]%2==0&&data[j]%2==0)
            j--;
        else if(data[j]%2!=0&&data[i]%2==0){
            int temp = data[j];
            data[j] = data[i];
            data[i] = temp;
            j--;
        }else{
            j--;
        }
    }
}
//打印
int Print(int data[],int length){

    for (int i = 0; i < length; i++)
    {
        printf("%d ",data[i]);
    }
}
//二分查找法 999表示查找失败
int Search(int data[],int i,int j,int flag){
    return i<=j?data[(i+j)/2]==flag?(i+j)/2:data[(i+j)/2]>flag?Search(data,i,(i+j)/2-1,flag):Search(data,(i+j)/2+1,j,flag):999;
}
int main(){
    int data[]={1,2,3,4,5,6,7,8,9,10,16,18,23};
    int length = sizeof(data)/sizeof(int);
    //OddAndDou(data,length);
    Print(data,length);
    printf("\n%d ",Search(data,0,length-1,11));
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值