王道C语言C++版查找算法总结

1. 顺序查找

顺序查找
//顺序查找
int Search_Seq(int A[],int n,int key){
    int i;
    A[0]=key;
    /*
    for (i = 1; ; i++)
        if (A[i] == key)
            break;
    if (i < n)
        return i;
    else
        return -1;
        */
    for(i=n;A[i]!=key;--i)
    {

    }
    return i;

}
int main(){
int a[11],i,key,k;    
printf("请输入10个数据:\n");
for (i =1;i<=10;i++)
    scanf("%d",&a[i]);    
printf("原始顺序:\n");
for(i=1;i<11;i++)
    printf("%5d",a[i]);    
//将未排序前的顺序输出
HeapSort(a,10);
 printf("\n 插入数据排序后顺序:\n");
for(i=1;i<11;i++)
    printf("%5d",a[i]); //将排序后的数组输出
printf("\n");
printf("请输入您想查找的元素:\n");
scanf("%d",&key);
//顺序查找
 k= Search_Seq(a,10,key);
 printf("查找出来的位置是%d\n",k);

}

2. 折半查找

折半查找
//折半查找
int Binary_Search(int a[],int n,int key){
int low,high,mid;
low=1;high=n;
//由于我的表从a[1]开始才有数据,所以下角标为此
//若从a[0]存储就是low=-1;high=n-1;
while(low<=high){
    mid=(low+high)/2;
    if(a[mid]==key)
        return mid;
    else if(a[mid]>key)
        high=mid-1;
    else
        low=mid+1;
}return -1;}

int main(){
int a[11],i,key,k;    
printf("请输入10个数据:\n");
for (i =1;i<=10;i++)
    scanf("%d",&a[i]);    
printf("原始顺序:\n");
for(i=1;i<11;i++)
    printf("%5d",a[i]);    
//将未排序前的顺序输出
HeapSort(a,10);
 printf("\n 插入数据排序后顺序:\n");
for(i=1;i<11;i++)
    printf("%5d",a[i]); //将排序后的数组输出
printf("\n");
printf("请输入您想查找的元素:\n");
scanf("%d",&key);
//二分查找
k=Binary_Search(a,10,key);
 printf("查找出来的位置是%d\n",k);}

3. 分块查找

分块查找
//自定义函数block_search,实现分块查找
struct index{
    int key;
    int start;
    int end;
}index_table[4];
int block_search(int key,int a[]){
    int i,j;
    i=1;
    while(i<=3&&key>index_table[i].key)//确定在哪个块中
        i++;
    if(i>3)//大于分得的块数,则返回0
        return 0;
    j=index_table[i].start;//j等于块范围的起始值
    while(j<=index_table[i].end&&a[j]!=key)
        j++;
    if(j>index_table[i].end)
        j=0;
    return j;
}


int main(){
//分块查找数据
int i,j=0,k,key,a[16];
printf("请输入15个数:\n");
for(i=1;i<16;i++)
    scanf("%d",&a[i]);
for(i=1;i<=3;i++){
    index_table[i].start=j+1;
    j=j+1;
    index_table[i].end=j+4;
    index_table[i].key=a[j];
}
printf("请输入您想查找的元素:\n");
scanf("%d",&key);
k=block_search(key,a);
if(k!=0)
    printf("查找成功,其位置是:%d\n",k);
else
    printf("查找失败!");
return 0;


}

朴素匹配算法(也称为暴力匹配算法)是一种最简单的字符串匹配算法,可以用于在一个文本串中查找一个模式串的出现位置。以下是C语言实现朴素匹配算法的示例代码: ```c #include <stdio.h> #include <string.h> int naiveMatch(char* text, char* pattern) { int textLen = strlen(text); int patternLen = strlen(pattern); for (int i = 0; i <= textLen - patternLen; i++) { int j; for (j = 0; j < patternLen; j++) { if (text[i + j] != pattern[j]) { break; } } if (j == patternLen) { return i; } } return -1; // 表示未找到匹配 } int main() { char text[] = "Hello, World!"; char pattern[] = "World"; int result = naiveMatch(text, pattern); if (result != -1) { printf("匹配成功!模式串的起始位置为:%d\n", result); } else { printf("未找到匹配!\n"); } return 0; } ``` 以上代码首先定义了一个`naiveMatch`函数,接受两个参数:`text`为文本串,`pattern`为要匹配的模式串。函数通过两重循环对文本串进行遍历,检查是否有与模式串匹配的子串。如果找到匹配,函数返回模式串的起始位置;如果未找到,则返回-1。 在`main`函数中,示例代码定义了一个文本串`text`和一个模式串`pattern`,并调用`naiveMatch`函数进行匹配。最后根据匹配结果输出相应的信息。运行代码将输出“匹配成功!模式串的起始位置为:7”。 需要注意的是,朴素匹配算法的时间复杂度为O((n-m+1)m),其中n为文本串长度,m为模式串长度。在最坏情况下,算法的效率较低,但在实际应用中,仍然有一定的适用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值