进阶-数据结构部门:3、常用查找算法

打印 上一主题 下一主题

主题 2002|帖子 2002|积分 6006

飞书文档
https://x509p6c8to.feishu.cn/wiki/LRdnwfhNgihKeXka7DfcGuRPnZt
次序查找

查找算法是指:从一些数据之中,找到一个特别的数据的实现方法。查找算法与遍历有极高的相似性,唯一的差别就是查找算法大概并不肯定会将每一个数据都举行访问,有些查找算法如二分查找等,并不必要完全访问所有的数据。
查找算法适用于很多场景,最典型的应用场景就是已知次品商品的特性,如何从一堆商品当中查找出这些次品。
次序查找算法是最简单的查找算法,其意思为:线性的从一个端点开始,将所有的数据依次访问,并求得所必要查找到的数据的位置,此时,线性查找可以称谓为遍历。

  1. #include <stdio.h>
  2. int sequential_search(int arr[], int n, int target) {
  3.     int times = 0;
  4.     for (int i = 0; i < n; i++) {
  5.         times ++;
  6.         printf("Find step : %d\n",times);
  7.         if (arr[i] == target) {
  8.             return i;
  9.         }
  10.     }
  11.     return -1;
  12. }
  13. int main() {
  14.     int arr[] = {1, 3, 5, 7, 9, 10, 11, 13, 15};
  15.     int n = sizeof(arr) / sizeof(arr[0]);
  16.     int target = 11;
  17.     int index = sequential_search(arr, n, target);
  18.     if (index == -1) {
  19.         printf("Can not find %d in array.\n",target);
  20.     } else {
  21.         printf("Find %d in array.\n",target);
  22.     }
  23.     return 0;
  24. }
复制代码
二分查找

二分查找也称折半查找(Binary Search),多数的人喜欢叫他二分查找。它是一种服从较高的查找方法。但是,折半查找要求线性表必须采用次序存储结构,而且表中元素按关键字有序分列,注意必须要是有序分列。

  1. #include <stdio.h>
  2. /**
  3. 1, 3, 5, 7, 9, 10, 11, 13, 15 -》10
  4. low = 4 + 1 = 5
  5. high = 8
  6. 10, 11, 13, 15-》10
  7. 10-》10
  8. */
  9. int binarySearch(int arr[],int len,int target){
  10.     int low,high;
  11.     int mid;
  12.     low = 0;
  13.     high = len -1;
  14.     int times = 0;
  15.     while (1)
  16.     {
  17.         times ++;
  18.         printf("当前正在进行第%d轮查找\n",times);
  19.         mid = (high - low)/2 + low;
  20.         if(target == arr[mid]){
  21.             return mid;
  22.         }else{
  23.             if(target < arr[mid]){
  24.                 printf("需要查找的值可能在左边的区间\n");
  25.                 high = mid - 1;
  26.             }else{
  27.                 printf("需要查找的值可能在右边的区间\n");
  28.                 low = mid + 1;
  29.             }
  30.         }
  31.         if(low > high){
  32.             return -1;
  33.         }
  34.     }
  35.    
  36. }
  37. int main(){
  38.     int arr[] = {1, 3, 5, 7, 9, 10, 11, 13, 15};
  39.     int len = sizeof(arr)/sizeof(arr[0]);
  40.     int target = 1;
  41.     int status = binarySearch(arr,len,target);
  42.     if(status == -1){
  43.         printf("找不到需要查找的值\n");
  44.     }else{
  45.         printf("找到需要查找的值 位置是%d\n",status);
  46.     }
  47. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

徐锦洪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表