开发者社区> 问答> 正文

如何用递归算法,实现对有序表的顺序搜索的功能 《C++》

如何用递归算法,实现对有序表的顺序搜索的功能 《C++》

展开
收起
知与谁同 2018-07-22 09:08:07 2356 0
1 条回答
写回答
取消 提交回答
  • 【1】随机生成一组数,用快速排序实现数组排序后,用您所想要的递归算法(二分思想)进行搜索,可否看得出快速排序与与该算法的有某处相同。
    【2】好好研究快速排序算法,无论对递归的运用还是提高分析能力都有很大的受益。

    #include "time.h"

    #define MAX 20

    void Initial(int a[]);
    void QuickSort(int a[],int left, int right);
    void Print(int a[]);
    int Search(int a[],int x,int start, int end);

    int main()
    {
    int a[MAX]={0};
    Initial(a);
    Print(a);
    QuickSort(a,0,MAX-1);
    printf("###After quick sort:###");
    Print(a);
    if (Search(a,10,0,MAX-1))
    {
    printf("\nfind");
    }
    else
    {
    printf("\nnot find");
    }
    return 0;
    }

    void Initial(int a[])
    {
    int i=0;
    srand( (unsigned)time(NULL));
    for (i=0; i<MAX; i++)
    {
    a[i] = rand()%MAX;
    }
    }
    void QuickSort(int a[],int l, int r)
    {
    int left=l,right=r;
    if (left>=right)
    {
    return ;
    }
    int temp = a[left];
    while (left<right)
    {
    //从右边开始找一个小于temp的数,找到或left>=right为止
    while (a[right]>=temp && left<right)
    {
    right--;
    }
    if (left<right)
    {
    a[left]=a[right];
    left++;
    }
    //从左边开始找一个大于temp的数,找到或left>=right为止
    while(a[left]<=temp && left<right)
    {
    left++;
    }
    if (left<right)
    {
    a[right]=a[left];
    right--;
    }
    }
    a[left] = temp;
    QuickSort(a,l,left-1);
    QuickSort(a,left+1,r);
    }
    void Print(int a[])
    {
    int i=0;
    for (i=0; i<MAX; i++)
    {
    printf("%d ",a[i]);
    }
    printf("\n");
    }
    //这是你所需要的递归算法,对有序表搜索。

    int Search(int a[],int x,int start, int end)
    {
    if (start>end)
    {
    return 0;
    }
    int mid=(start+end)/2;
    if (x == a[mid])
    {
    return 1;
    }
    if (x>a[mid])
    {
    Search(a,x,mid+1,end);
    }
    else if (x<a[mid])
    {
    Search(a,x,start,mid-1);
    }
    }

    -------------------------

    顺序搜索要用递归么。。。·····对有序表的话用二分就行了········
    递归的话适用于数列····
    a(n)=a(n-1)+a(n-2)
    这种,数列元素直接有一定联系的才行·····,有序表···用递归的话···我唯一能想到的就是

    int f(int n,int i){
    int a;
    if(a[i]==n)
    return i;
    else{
    a=f(n,i+1);
    return a;
    }
    }

    main(){
    ~
    f(n,0)
    ~
    }

    大概就这样了··从0号元素搜索···不是就下一号········,其他的我就想不出如何用递归搜索有序表了·······

    2019-07-17 22:55:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载