6.2顺序表&有序表上的查找

#include "stdafx.h"
#include 
<iostream.h>
#include 
<malloc.h>

//顺序表上的查找
int const maxsize=10;
typedef 
struct
{
    
int key;
}
rec;

typedef 
struct
{
    rec item[maxsize
+1];
    
int n;                //最后一个元素下标
}
sqtable;

int search_sqtable(sqtable R,int key)
{
    
//设置第0个元素为待查键,它起岗哨的作用,保证循环肯定有匹配的键.没有用正常的循环过程是为了减化操作,提高效率
    R.item[0].key=key;
    
int i=R.n;
    
while(R.item[i].key!=key)
        i
--;
    
return i;
}

//我的书中在讲此节时错误很多,多为印刷错误,我的书应该是正版的,不知道其它如何.书中的
int binsearch(sqtable R,int key)
{
    
int low=1,hig=R.n;
    
while(low<=hig)
    
{
        
int mid=(low+hig)/2;
        
if (R.item[mid].key==key)
        
{
            
return mid;
        }

        
else if (R.item[mid].key>key)
        
{
            low
=mid+1;                    //书中此处为low=low+1,应该是印刷错误,此处改为low=mid+1
        }

        
else if (R.item[mid].key<key)
        
{
            hig
=mid-1;
        }

    }

    
return 0;
}

int main(int argc, char* argv[])
{
    sqtable table;
    
for(int i=1;i<11;i++)
    
{
        table.item[i].key
=i+100;
    }

    table.n
=5;
    cout
<<"使用顺序查找:"<<search_sqtable(table,103)<<endl;
    cout
<<"使用二分查找:"<<binsearch(table,103)<<endl;
    
return 0;
}

    
posted @ 2007-08-03 09:43  吴东雷  阅读(323)  评论(0编辑  收藏  举报