数据结构与算法(第一章.搜索)

请记住,所用的搜索法都是基于数列是有序的,如果不是,还需要进一步排序才可计算。

一.二分搜索法

#include<stdio.h>
int binary_searching(int * arr,int target,int left,int right){
    int mid=left+right;
    if (arr[mid]==target){
        return mid;
    }
    if(arr[mid]>target){
        binary_searching(arr,target,left,mid-1);
    }
    else{
        binary_searching(arr,target,mid+1,right);
    }


}
int main(){
    int arr1[10]={3,4,5,2,8,1,0,3,76,477};
    int target1=8;int left=3;int right=477;
    
}

二.三分搜索

#include <stdio.h>

int ternarySearch(int arr[], int l, int r, int x) {
    if (r >= l) {
        int mid1 = l + (r - l) / 3;
        int mid2 = r - (r - l) / 3;

        // 如果元素存在于中间的间隔中
        if (arr[mid1] == x || arr[mid2] == x) {
            return mid1 + 1; // 返回元素的下标+1,因为返回的是数组下标,不是索引
        }

        // 如果元素小于中间的第一个间隔,则在左边的子数组中查找
        if (arr[mid1] > x) {
            return ternarySearch(arr, l, mid1 - 1, x);
        }

        // 如果元素大于中间的最后一个间隔,则在右边的子数组中查找
        if (arr[mid2] < x) {
            return ternarySearch(arr, mid2 + 1, r, x);
        }

        // 如果元素不存在于数组中,则返回-1
        return -1;
    }

    return -1; // 如果数组为空或查找范围为空,则返回-1
}

int main() {
    int arr[] = {2, 5, 7, 8, 12, 14, 19, 20};
    int n = sizeof(arr) / sizeof(arr[0]); // 获取数组长度
    int x = 8; // 要查找的元素
    int result = ternarySearch(arr, 0, n - 1, x); // 在数组中查找元素
    if (result == -1) {
        printf("Element is not present in array"); // 如果元素不存在于数组中,则输出错误信息
    } else {
        printf("Element is present at index %d", result); // 如果元素存在于数组中,则输出元素的下标
    }
    return 0;
}

全部评论

相关推荐

狸猫换offer:埋点都出来了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务