C程序设计C程序设计 (65).pdf
《C程序设计C程序设计 (65).pdf》由会员分享,可在线阅读,更多相关《C程序设计C程序设计 (65).pdf(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C程序设计程序设计Programming in CProgramming in C实现查找算法实现查找算法1、顺序查找法2、二分查找法3、插值查找法4、斐氏查找法C C程序设计程序设计程序设计程序设计3 36.5 6.5 数组应用程序举例数组应用程序举例(1)顺序查找法顺序查找的基本思想是让关键字与序列中的数逐个比较,直到找出与给定关键字相同的数为止或序列结束,一般应用于无序序列查找。4 46.5 6.5 数组应用程序举例数组应用程序举例【例6.14】编写顺序查找函数Search,从一个无序数组中查找数据的位置。5 56.5 6.5 数组应用程序举例数组应用程序举例例6.141#inclu
2、de#include 2 intint SearchSearch(intint A A,intint n n,intint findfind)3 /顺序查找 n=序列元素个数 find=欲查找数据/顺序查找 n=序列元素个数 find=欲查找数据4 intint i i;5 forfor(i i=0 0;i i=0 0)printfprintf(A%d=%d(A%d=%dnn,i i,findfind););15 elseelse printfprintf(not found(not foundnn););6 66.5 6.5 数组应用程序举例数组应用程序举例例6.1416 returnret
3、urn 0 0;17 7 76.5 6.5 数组应用程序举例数组应用程序举例例6.141#include#include 2 int Search(int A,int n,int find)int Search(int A,int n,int find)3 /顺序查找 n=序列元素个数 find=欲查找数据/顺序查找 n=序列元素个数 find=欲查找数据4 int i;int i;5 for(i=0;in;i+)if(Ai=find)return i;for(i=0;i=0)printf(A%d=%dn,i,find);if(i=0)printf(A%d=%dn,i,find);15 els
4、e printf(not foundn);else printf(not foundn);A4=101101程序运行屏幕8 86.5 6.5 数组应用程序举例数组应用程序举例(2)二分查找法对于有序序列,可以采用二分查找法进行查找。它的基本思想是:升序排列的n个元素集合A分成个数大致相同的两部分,取An/2与欲查找的find作比较,如果相等则表示找到find,算法终止。如果findAn/2,则在A的后半部继续搜索find。9 96.5 6.5 数组应用程序举例数组应用程序举例【例6.15】编写二分查找函数BinarySearch,从一个有序数组中查找数据的位置。10106.5 6.5 数组应用
5、程序举例数组应用程序举例例6.151#include#include 2 intint BinarySearchBinarySearch(intint A A,intint n n,intint findfind)3 /二分查找 n=序列元素个数 find=欲查找数据/二分查找 n=序列元素个数 find=欲查找数据4 intint lowlow,upperupper,midmid;5 lowlow=0 0,upperupper=n n-1 1;/左右两部分/左右两部分6 whilewhile(lowlow=upperupper)7 midmid=lowlow+(+(upperupper-lo
6、wlow)/)/2 2;/不用(upper+low)/2,避免upper+low溢出/不用(upper+low)/2,避免upper+low溢出8 ifif(A A midmid findfind)upperupper=midmid-1 1;/左半部分/左半部分10 else returnelse return midmid;/找到/找到11 12 returnreturn-1 1;/未找到/未找到13 14#define N 10#define N 1011116.5 6.5 数组应用程序举例数组应用程序举例例6.1515 intint mainmain()()16 17 intint A
7、A N N=8 8,2424,3030,4747,6262,6868,8383,9090,9292,9595,i i,findfind;18 scanfscanf(%d,&(%d,&findfind););19 i i=BinarySearchBinarySearch(A A,N N,findfind););20 ifif(i i=0 0)printfprintf(A%d=%d(A%d=%dnn,i i,findfind););21 elseelse printfprintf(not found(not foundnn););22 returnreturn 0 0;23 12126.5 6.5
8、 数组应用程序举例数组应用程序举例例6.151#include#include 2 int BinarySearch(int A,int n,int find)int BinarySearch(int A,int n,int find)3 /二分查找 n=序列元素个数 find=欲查找数据/二分查找 n=序列元素个数 find=欲查找数据4 int low,upper,mid;int low,upper,mid;5 low=0,upper=n-1;/左右两部分low=0,upper=n-1;/左右两部分6 while(low=upper)while(low=upper)7 mid=low+(u
9、pper-low)/2;/不用(upper+low)/2,避免upper+low溢出mid=low+(upper-low)/2;/不用(upper+low)/2,避免upper+low溢出8 if(Amid find)low=mid+1;/右半部分if(Amid find)upper=mid-1;/左半部分else if(Amid find)upper=mid-1;/左半部分10 else return mid;/找到else return mid;/找到11 12 return-1;/未找到return-1;/未找到13 14#define N 10#define N 10A8=9292程序
10、运行屏幕13136.5 6.5 数组应用程序举例数组应用程序举例(3)插值查找法如果欲查找的数据分布平均时,可以使用插值法(Interpolation),或称为插补法来进行查找,在查找的数据对象大于500时,插值查找法会比二分查找法来得快速。14146.5 6.5 数组应用程序举例数组应用程序举例插值查找法是以数据分布的近似直线来作比例运算,以求出中间的索引并进行数据比对,如果取出的值小于要寻找的值,则提高下界,如果取出的值大于要寻找的值,则降低下界,如此不断地减少查找的范围。15156.5 6.5 数组应用程序举例数组应用程序举例所以插值查找法的原理与二分查找法是相同的,至于中间值的寻找是通
11、过比例运算。如下所示,其中K是指定要寻找的对象,而m则是可能的索引值:lulKKmlKKul11()1uKKmulKK16166.5 6.5 数组应用程序举例数组应用程序举例【插值查找法举例】编写查找函数InterpolationSearch,从一个数组中查找数据的位置。17176.5 6.5 数组应用程序举例数组应用程序举例例6.611#include#include 2#include#include 3#include#include 4 intint InterpolationSearchInterpolationSearch(intint A A,intint n n,intint
12、findfind)5 6 intint lowlow,upperupper,midmid;7 lowlow=0 0;8 upperupper=n n-1 1;9 whilewhile(lowlow=upperupper)10 midmid=(=(upperupper-lowlow)*()*(findfind-A A lowlow)/()/(A A upperupper-A A lowlow)+)+lowlow;11 ifif(midmid upperupper)breakbreak;12 ifif(findfind A A midmid)lowlow=midmid+1 1;14 else re
13、turnelse return midmid;15 18186.5 6.5 数组应用程序举例数组应用程序举例例6.6116 returnreturn-1 1;17 18 voidvoid QuickSortQuickSort(intint A A,intint n n,intint leftleft,intint rightright)19 /快速排序 n为数组元素个数 left=数组左边界 right=数组右边界/快速排序 n为数组元素个数 left=数组左边界 right=数组右边界20 intint i i,j j,t t;21 ifif(leftleft rightright)/一趟快
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计C程序设计 65 程序设计 65
限制150内