シーヶンステーブルスタティックルックアップ

18399 ワード

シーケンシャル・テーブルの静的検索の実装(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("
"); }