mirror of
https://github.com/This-weiyuqing/DSAndOS.git
synced 2026-10-18 03:03:58 +08:00
update
This commit is contained in:
1 parent
16d694ffe3
commit
35e5484d7c
183 files changed
+362
-7145
No files matched your search
@@ -0,0 +1,77 @@
|
||||
//算法7.3 折半查找
|
||||
|
||||
|
||||
|
||||
#include<iostream>
|
||||
using namespace std;
|
||||
#define MAXSIZE 100
|
||||
#define OK 1;
|
||||
|
||||
typedef struct{
|
||||
int key;//关键字域
|
||||
}ElemType;
|
||||
|
||||
typedef struct{
|
||||
ElemType *R;
|
||||
int length;
|
||||
}SSTable;
|
||||
|
||||
int InitList_SSTable(SSTable &L)
|
||||
{
|
||||
L.R=new ElemType[MAXSIZE];
|
||||
if (!L.R)
|
||||
{
|
||||
cout<<"初始化错误";
|
||||
return 0;
|
||||
}
|
||||
L.length=0;
|
||||
return OK;
|
||||
}
|
||||
|
||||
int Insert_SSTable(SSTable &L)
|
||||
{
|
||||
int j=1;
|
||||
for(int i=1;i<MAXSIZE;i++)
|
||||
{
|
||||
L.R[i].key=j;
|
||||
L.length++;
|
||||
j++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int Search_Bin(SSTable ST,int key) {
|
||||
// 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为
|
||||
// 该元素在表中的位置,否则为0
|
||||
int low=1,high=ST.length; //置查找区间初值
|
||||
int mid;
|
||||
while(low<=high) {
|
||||
mid=(low+high) / 2;
|
||||
if (key==ST.R[mid].key) return mid; //找到待查元素
|
||||
else if (key<ST.R[mid].key) high = mid -1; //继续在前一子表进行查找
|
||||
else low =mid +1; //继续在后一子表进行查找
|
||||
}//while
|
||||
return 0; //表中不存在待查元素
|
||||
}// Search_Bin
|
||||
|
||||
void Show_End(int result,int testkey)
|
||||
{
|
||||
if(result==0)
|
||||
cout<<"未找到"<<testkey<<endl;
|
||||
else
|
||||
cout<<"找到"<<testkey<<"位置为"<<result<<endl;
|
||||
return;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
SSTable ST;
|
||||
InitList_SSTable(ST);
|
||||
Insert_SSTable(ST);
|
||||
int testkey1=7,testkey2=200;
|
||||
int result;
|
||||
result=Search_Bin(ST, testkey1);
|
||||
Show_End(result,testkey1);
|
||||
result=Search_Bin(ST, testkey2);
|
||||
Show_End(result,testkey2);
|
||||
}
|
||||
Reference in new issue
Block a user