zoukankan      html  css  js  c++  java
  • 顺序表静态查找

    实现顺序表的静态查找(SeqSearch、BinarySearch、GoldenSectionSearch、)

    how many elements in your list:20
    Please enter the 1th number:1
    Please enter the 2th number:11
    Please enter the 3th number:2
    Please enter the 4th number:22
    Please enter the 5th number:3
    Please enter the 6th number:33
    Please enter the 7th number:4
    Please enter the 8th number:44
    Please enter the 9th number:5
    Please enter the 10th number:55
    Please enter the 11th number:6
    Please enter the 12th number:66
    Please enter the 13th number:7
    Please enter the 14th number:77
    Please enter the 15th number:8
    Please enter the 16th number:88
    Please enter the 17th number:9
    Please enter the 18th number:99
    Please enter the 19th number:10
    Please enter the 20th number:111
    The list you create is:
    1  11  2  22  3  33  4  44  5  55  6  66  7  77  8  88  9  99  10  111
    The list after sorting is:
    1  2  3  4  5  6  7  8  9  10  11  22  33  44  55  66  77  88  99  111
    Please enter the number you want to search:3
    SeqSearch=======18
    the number's position is:3
    BinarySearch=======4
    the number's position is:3
    GoldenSectionSearch=======5
    the number's position is:3
    请按任意键继续. . .
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    #define GOLD 0.618
    #define MAX_SIZE 100
    
    typedef int ElementType;
    typedef int KeyType;
    
    typedef struct 
    {
        ElementType elem[MAX_SIZE];
        int length;
    }SSTable;
    
    int Search(SSTable *ST,KeyType key);
    void ListInit(SSTable *ST);
    void ListCreate(SSTable *ST, int count);
    void ListSort(SSTable *ST);
    int BinarySearch(SSTable *ST,KeyType key);
    void ListDisplay(SSTable *ST);
    int GoldenSectionSearch(SSTable *ST,KeyType key);
    
    void main()
    {
        int i,count, num;
        SSTable ST;
        ListInit(&ST);
        printf_s("how many elements in your list:");
        scanf_s("%d",&count);
        ListCreate(&ST,count);
        printf_s("The list you create is:
    ");
        ListDisplay(&ST);
    
        ListSort(&ST);
        printf_s("The list after sorting is:
    ");
        ListDisplay(&ST);
    
        printf_s("Please enter the number you want to search:");
        scanf_s("%d",&num);
    
        printf_s("SeqSearch");
        i = Search(&ST,num);
        printf_s("the number's position is:%d
    ",i);
    
        printf_s("BinarySearch");
        i = BinarySearch(&ST,num);
        printf_s("the number's position is:%d
    ",i);
    
        printf_s("GoldenSectionSearch");
        i = GoldenSectionSearch(&ST,num);
        printf_s("the number's position is:%d
    ",i);
        system("pause");
    }
    
    void ListInit(SSTable *ST)
    {
        ST->length=0;
    }
    
    void ListCreate(SSTable *ST, int count)
    {
        int i,num;
        ST->length=count;
        for(i=1;i<=count;++i)
        {
            printf_s("Please enter the %dth number:",i);
            scanf_s("%d",&num);
            ST->elem[i]=num;
        }
    }
    
    void ListSort(SSTable *ST)
    {
        int i,j,temp;
        for(j=1;j<=ST->length-1;++j)
        {
            for(i=1;i<=ST->length-j;++i)
            {
                if(ST->elem[i]>ST->elem[i+1])
                {
                    temp=ST->elem[i];
                    ST->elem[i]=ST->elem[i+1];
                    ST->elem[i+1]=temp;
                }
            }
        }
    }
    
    int Search(SSTable *ST,KeyType key)
    {
        int i, counter;
        counter = 0;
        ST->elem[0]=key;
        for(i = ST->length; i > 0; --i)
        {
            ++counter;
            if(key==ST->elem[i])
            {
                printf_s("=======%d
    ",counter);
                return i;
            }
        }
        printf_s("=======%d
    ",counter);
        return i;
    }
    
    int BinarySearch(SSTable *ST,KeyType key)
    {
        int low,high,mid,counter;
        low=1;
        counter=1;
        high=ST->length;
        while(low<=high)
        {
            mid=(low+high)/2;
            if(key==ST->elem[mid])
            {
                printf_s("=======%d
    ",counter);
                return mid;
            }else if(key<ST->elem[mid])
            {
                ++counter;
                high=mid-1;
            }else
            {
                ++counter;
                low=mid+1;
            }
        }
        printf_s("=======%d
    ",counter);
        return 0;
    }
    
    int GoldenSectionSearch(SSTable *ST,KeyType key)
    {
        int low,high,mid,counter;
        low=1;
        counter=1;
        high=ST->length;
        while(low<=high)
        {
            mid=(high -low)*GOLD +low;
            //mid = high * GOLD + low*(1-GOLD);
            if(key==ST->elem[mid])
            {
                printf_s("=======%d
    ",counter);
                return mid;
            }else if(key<ST->elem[mid])
            {
                ++counter;
                high=mid-1;
            }else
            {
                ++counter;
                low=mid+1;
            }
        }
        printf_s("=======%d
    ",counter);
        return 0;
    }
    
    void ListDisplay(SSTable *ST)
    {
        int i;
        for (i = 1; i <= ST->length; ++i)
        {
            printf_s("%d  ", ST->elem[i]);
        }
        printf_s("
    ");
    }
  • 相关阅读:
    入门OJ 1278【关系网络】
    HDU 1372【Knight Moves】
    ZOJ 1047【Image Perimeters】
    log4J——在Spring中的使用
    实用性很强的文章(不来源于博客园)
    详解AOP——用配置文件的方式实现AOP
    Spring与Web项目整合的原理
    IOC——Spring的bean的管理(注解方式)
    IOC——Spring的bean的管理(xml配置文件)
    关于XML文件
  • 原文地址:https://www.cnblogs.com/zhangtingkuo/p/3462237.html
Copyright © 2011-2022 走看看