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


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

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

    代码如下

          /// <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;
            }

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

    运行结果

               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();

  • 相关阅读:
    create-react-app 修改 webpack output.publicPath
    洛谷 P1282 多米诺骨牌 (01背包)
    UVa 1627
    UVa 1626
    UVa 11584
    UVa 11400
    UVa 116
    UVa 1347 Tour (dp)
    树形背包小结
    数据流图题目一
  • 原文地址:https://www.cnblogs.com/for-easy-fast/p/14050461.html
Copyright © 2020-2023  润新知