二分法查表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return0;
}
这个函数是我对所用的函数的简化,因为这个才更直观,不会被大量的数据所吓到。
大家一定一看就明白了,所以下面我对这个程序简单的说一下:
这个程序主要就是SearchCodeTable这个函数,也就是我们说的二分法查表,我们查找的就是结构体数组code_table;
这个数组原本是unicode码,和GB码的对应表,稍后会把这个表给大家,供以后学习使用,这里就是用一些简单的数字数组代替,这样显得会更直观。
在程序里我们可以看出,我们把表定义三个指针位置,用first=0表示开始,end=TABLE_SIZE-1表示表的结束。移动指针就是mid=0。
然后就是进入查表,就是在first<=end下开始进行查表,
mid = (first+end)/2;就是去表中间位置开始,然后判断所要查找的数据是在移动指针的上面还是下面,当在移动指针的上面是,也就是(code_table[mid].unicode > unicodeKey)成立这是我们要把结束指针上移,如果在移动指针的下面,那就要把开始指针下移,这样就可以逐渐缩小查找范围,直到要查找的数据或first>end 退出函数。
来之百度网友
我们知道,二分法在查表上的应用不可小视,因为他使查表的效率得到很大的提高。
百度文库#include<stdio.h>
#include<string.h>
#defineTABLE_SIZE5
typedefstructunicode_gb
{
unsigned shortunicode;
unsigned shortgb;
} UNICODE_GB;
UNICODE_GB code_table[] =
{
{1,77},
{2,55},
{3,89},
{4,4},
{5,99},
};
unsigned shortSearchCodeTable(unsigned shortunicodeKey)
{
int first=0;
intend = TABLE_SIZE -1;
}
else if (code_table[mid].unicode > unicodeKey)
{
end = mid -1;
}
else
{
first = mid +1;
}
}
return0;
}
intmain(void)
{
printf("search_number[%d]=%d\n",2,SearchCodeTable(2));
intmid =0;
//while(mid < CODE_TABLE_SIZE)
while (first <= end)
{
mid = (first + end) /2;
//mid++;
if (code_table[mid].unicode == unicodeKey)
{
returncode_table[mid].gb;
相关文档
最新文档