查找(一)静态查找的顺序查找和 有序折半查找
2013-08-06 11:53
946 查看
数据的静态查找:顺序表查找和 有序表的折半查找
顺序查找: 将数据与待查找的元素相比较,如果找到相同的元素,就表示查找成功,否则查找失败。值得注意的是,在程序中设置了一个哨兵项,位于数组的第0个合肥位置,这样做的好处是可以更方便的判断什么时候循环应该终止,减小循环中的比较次数,对提高效率有很大帮助。
有序表的折半查找:要先将数组的顺序排成有序的,比如说非降序的,然后再用折半查找法。折半查找的效率比有序查找高,但折半查找只适用于有序表,且限于顺序存储结构(对线性链表无法有效地进行折半查找)。
顺序查找: 将数据与待查找的元素相比较,如果找到相同的元素,就表示查找成功,否则查找失败。值得注意的是,在程序中设置了一个哨兵项,位于数组的第0个合肥位置,这样做的好处是可以更方便的判断什么时候循环应该终止,减小循环中的比较次数,对提高效率有很大帮助。
有序表的折半查找:要先将数组的顺序排成有序的,比如说非降序的,然后再用折半查找法。折半查找的效率比有序查找高,但折半查找只适用于有序表,且限于顺序存储结构(对线性链表无法有效地进行折半查找)。
#include<stdio.h> #include<stdlib.h> //顺序表的查找 int Search_Seq(int ST[],int key,int n) { int i=0; while( ST[i]!=key && i<n) i++; return i; return -1; } //顺序表的查找 int Search_Seq1(int ST[],int key,int n) { int i,j; int * arra = (int *)calloc(n+1,sizeof(int));//将原始数组装入一个新的数组中,该数组首字符为空,为哨兵使用 for(i=1;i<=n;i++) *(arra+i) = ST[i-1]; arra[0] = key; for(j=n; arra[j] != key; --j); return j-1;//这里面的第j个相当于原数组里j-1个 } //对数组ST进行排序 void sort_accend(int ST[],int len) { int i,j,index,min,temp; for(i=0;i<len;i++) { min = ST[i]; for(j=i;j<len;j++) if(ST[j]<min) { min = ST[j]; index = j; } temp = ST[i]; ST[i] = ST[index]; ST[index] = temp; } //for(int k=0;k<len;k++) // printf("%d\n",ST[k]); } //有序表的查找,折半查找 int Search_Bin(int ST[],int key,int len) { int low = 0; int high = len -1; int mid; while(low<=high) { mid = (low+high)/2; if( key < ST[mid] ) high = mid - 1; else if( key > ST[mid] ) low = mid + 1; else return mid; } return -1; } int main() { int n = 8; int ST[8] = {49,38,65,97,76,13,27,49}; int key; int result; printf("顺序表的查找,输入要查找的元素:\n"); scanf("%d",&key); result = Search_Seq1(ST,key,n); if( result!=-1) printf("顺序查找成功,是第 %d 个元素\n",result); else printf("顺序查找不成功\n"); sort_accend(ST,n);//静态有序折半法查找,要先排序 for(int k=0;k<n;k++) printf("%d\n",ST[k]); printf("有序折半的查找,输入要查找的元素:\n"); scanf("%d",&key); result = Search_Bin(ST,key,n); if(result!=-1) printf("有序折半查找成功,是第%d个元素\n",result); else printf("有序折半查找不成功"); system("pause"); return 0; }
相关文章推荐
- 静态查找(顺序查找和折半查找)
- 静态查找表:顺序查找、折半查找、分块查找
- 静态表查找--顺序表的查找(有序)--折半查找
- 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
- 静态查找表:顺序查找、折半查找、分块查找
- 静态查找——顺序查找、折半查找
- 静态查找(顺序查找,折半查找,插值查找,斐波那契查找)
- 静态查找表:顺序查找、折半查找、分块查找
- 大话数据结构——有序查找的折半查找(裴波那契查找)
- 【Data_Structure笔记9】查找算法之【顺序查找和折半查找】
- 查找-顺序,有序表
- 有序的静态查找表的折半(二分)查找算法
- 【查找--静态查找】简单的顺序查找
- 顺序查找,折半查找(递归与非递归)
- 【数据结构】算法9.2 有序表查找-折半查找
- PHP 顺序查找和二分查找(也叫做折半查找)算法
- 写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
- 写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找(Swift版)
- C/C++查找之一(顺序查找、折半查找(二分查找))