700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 查找算法之顺序查找和二分查找

查找算法之顺序查找和二分查找

时间:2019-10-19 14:52:18

相关推荐

查找算法之顺序查找和二分查找

1.顺序查找

基本思想:从数据结构线性表一端开始,顺序扫描,依次将扫描到的关键字值与给定key相比较,若相等则表示查找成功 ;若扫描结束仍没有找到关键字等于key值的结点,表示查找失败。

顺序查找适合于存储结构为顺序存储或链接存储的线性表。

代码如下:

#include<cstdio>#include<iostream>using namespace std;const int maxn = 110; int arr[maxn];int SequenceSearch(int arr[],int key, int n);int main(){int n,key;printf("请输入元素的个数:\n"); scanf("%d",&n);printf("请输入数组中的元素:\n");for(int i=0; i<n; i++){scanf("%d", &arr[i]);}printf("请输入要查找的值: ");scanf("%d", &key);int k = SequenceSearch(arr, key, n);if(k != -1) printf("该值在数组下标为%d的位置", k);else printf("该值不存在!"); return 0;}int SequenceSearch(int arr[],int key, int n){int flag = 0;for(int i=0; i<n; i++){if(arr[i] == key){flag =1;return i;}}if(flag == 0) return -1;}

编译运行结果如图所示:

2.二分查找

基本思想:二分查找也称折半查找,中间结点将整个有序表分成两个子表,先将中间结点的关键字与给定的key值进行比较,若相等则查找成功;若不相等,则比较key值与中间结点关键字的大小,若key值小于中间结点关键字值,就继续在左边的字表进行二分查找,反之,在右边的字表进行二分查找。递归进行,直到查找到或查找结束发现表中没有这样的结点。

二分查找的表必须是有序的,如果是无序的需要进行排序;二分查找是一棵二叉排序树,每个根节点的值都大于左子树的所有结点的值,小于右字数所有结点的值。

代码如下:

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int maxn = 110; int arr[maxn];int BinarySearch(int arr[],int key, int n);int main(){int n,key; //元素个数,查找的值printf("请输入元素的个数:\n"); scanf("%d",&n);printf("请输入数组中的元素:\n");for(int i=0; i<n; i++){scanf("%d", &arr[i]);}printf("请输入要查找的值: ");scanf("%d", &key);sort(arr, arr+n); //排序函数 int k = BinarySearch(arr, key, n);if(k != -1) printf("该值存在!");else printf("该值不存在!"); return 0;}int BinarySearch(int arr[], int key, int n){int low = 0, high = n-1;while(low <= high){int mid = (low +high)/2; //找出序列的中间点if(arr[mid] == key) return mid;else if(arr[mid]> key) high = mid -1;else low = mid+1; }return -1;}

编译运行的结果如图所示:

参考文章

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。