前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#查找算法2:插值查找

C#查找算法2:插值查找

作者头像
明志德道
发布2023-10-21 17:41:12
1620
发布2023-10-21 17:41:12
举报
文章被收录于专栏:明志德到的IT笔记

插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。

原理:    (midIndex-lowIndex) /(highIndex-lowIndx)  的比值 ≈≈(value-a[low])/(a[high]-a[low]))的比值

代码如下

代码语言:javascript
复制
      /// <summary>
        /// 插值查找
        /// </summary>
        /// <param name="arr">数组</param>
        /// <param name="low">初始索引</param>
        /// <param name="high">末尾索引</param>
        /// <param name="value">要找的值</param>
        /// <returns></returns>
        static int InsertSearch(int[] arr,int low,int high,int value)
        {
            if (arr == null || arr.Length == 0 || low >= high)
            {
                return -1;
            }
            int mid;
            while (low <= high)
            {
                mid  = low+((value - arr[low]) / (arr[high] - arr[low]))*(high-low);// 插值查找的核心代码
                if (value > arr[mid])//值在arr[mid]的右边
                {
                    low = mid + 1;
                }
                if(value<arr[mid])//值在arr[mid]的左边
                {
                    high = mid - 1;
                }
                if(value==arr[mid])
                {
                    return mid;
                }
            }
            return -1;
        }

其实还有第二种写法,递归,写法差不多,不会的去看我的上一篇“二分查找”

运行结果

代码语言:javascript
复制
           Console.WriteLine($"数据算法");
            Random random = new Random();

            var arr1 = GetArrayData(20, 1,15 );
            Console.WriteLine($"生成未排序数据arr1:{ShowArray(arr1)}");

            var arr5 = QuickSort(arr1, 0, arr1.Length - 1);
            Console.WriteLine($"快速排序arr5:{ShowArray(arr5)}");

            var randomIndex = random.Next(0, arr5.Length);
            var arr5Index= InsertSearch(arr5, 0, arr5.Length - 1, arr5[randomIndex]);
            Console.WriteLine($"{arr5[randomIndex]}在 arr5中出现的索引位置是{arr5Index}");

            Console.ReadLine();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档