快速排序 and 拉格朗日插值查找

        private static void QuictSort(int[] zu, int left, int right)
        {
            if (left < right)
            {
                int i = 0;
                int j = right - 1;
                int mid = zu[(left + right) / 2];
                while (true)
                {
                    while (i<right && zu[i]<mid)
                    {
                        i++;
                    }
                    while (j > left && zu[j] > mid)
                    {
                        j--;
                    }
                    if (i == j)
                    {
                        break;
                    }
                    int temp = zu[i];
                    zu[i] = zu[j];
                    zu[j] = temp;
                    if (zu[i] == zu[j])
                    {
                        j--;
                    }
                }
                QuictSort(zu, left, i);
                QuictSort(zu, i + 1, right);
            }

        }
// 拉格朗日插值查找

private static int LChaZhao(int[] zu, int key)
        {
            int left = 0;
            int right = zu.Length - 1;
            int middle = -1;
            while (left <= right)
            {
                middle = left + (right - left) * (key - zu[left]) / (zu[right] - zu[left]);
                if (key == zu[middle])
                {
                    return middle;
                }
                else if (key > zu[middle])
                {
                    left = middle + 1;
                }
                else
                {
                    right = middle - 1;
                }
            }
            return -1;
        }

原文地址:https://www.cnblogs.com/zhaodadan/p/9963448.html

时间: 2024-12-08 08:10:25

快速排序 and 拉格朗日插值查找的相关文章

二分查找法以及拉格朗日插值查找法

不管是二分查找法还是拉格朗日法,必须先排序,否则无法使用. 插值查找发速度比二分查找法要快 插值查找法,数据均匀是1次找到,不均匀是多次,即使这样这样它也是快于二分的. 那个1.0挺重要的一个技巧,将那个比例变成实数. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <stdlib.h> #define N 1024 void search(int a[N],int num) { int tou = 0; int

拉格朗日插值查找法

#include<iostream> using namespace std; int search(const int*, int, int); int main() { int arr[6] = {1,2,3,4,10,20}; int find = search(arr, 6, 10); if(find == -1) cout << "没有找到!" << endl; else cout << arr[find] << e

数据结构之--插值查找

数据结构之--插值查找 定义:插值查找就是把要查找的关键字key与查找表中最大和最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式(key-a[low])/(a[high]-a[low]) 图解: 时间复杂度:只是把折半的算法由mid=(low+high)/2变为了(mid=low+(high-low)*(key-a[low])/(a[high]-a[low])),所以时间复杂度还是为与普通折半查找一样为:O(logn). #include<stdio.h> int Binary_S

【数值分析】拉格朗日插值与牛顿插值

在工程应用和科学研究中,经常要研究变量之间的关系y=f(x).但对于函数f(x),常常得不到一个具体的解析表达式,它可能是通过观测或实验得到的一组数据(x,f(x)),x为一向量;或则是解析表达式非常复杂,不便于计算和使用.因此我们需要寻找一个计算比较简单的函数S(x)近似代替f(x),并使得S(x)=f(x),这种方法就称为插值法. 常用的插值法有: 一维插值法:拉格朗日插值.牛顿插值.分段低次插值.埃尔米特插值.样条插值. 二维插值法:双线性插值.双二次插值. 拉格朗日插值法 已知函数f(x

拉格朗日插值Python代码实现

1. 数学原理 对某个多项式函数有已知的k+1个点,假设任意两个不同的都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为: 其中每个lj(x)为拉格朗日基本多项式(或称插值基函数),其表达式为: 2. 轻量级实现 利用 直接编写程序,可以直接插值,并且得到对应的函数值.但是不能得到系数,也不能对其进行各项运算. def h(x,y,a): ans=0.0 for i in range(len(y)): t=y[i] for j in range(len(y)): if i !=j:

9.18 内存区域 全局变量 线程 插值查找 位域 栈的实现

栈区可以修改默认大小配置: 栈区默认的大小是1M,在vs2013中可以修改. 堆区和栈区的地址区别: 栈是连续的,向上增长,地址越来越小.类似数组. 堆是链接的,向下增长,地址越来越大.类似链表. 栈区   高地址到低地址 堆区   低地址到高地址 #include <stdio.h> #include <stdlib.h> int main() { int a = 1, b = 2; printf("%p,%p\n", &a, &b); //a

(java)有序表查找——折半查找,插值查找,斐波那契查找

有序表查找 /* 主函数 */ public class OrderTableSearch { public static void main(String[] args) { int [] a= {0,1,16,24,35,47,59,62,73,88,99}; System.out.println(FibonacciSearch(a, 10, 88)); System.out.println(InsertKeySearch(a, 10, 88)); System.out.println(Bi

Educational Codeforces Round 7 F - The Sum of the k-th Powers 拉格朗日插值

The Sum of the k-th Powers There are well-known formulas: , , . Also mathematicians found similar formulas for higher degrees. Find the value of the sum modulo 109 + 7 (so you should find the remainder after dividing the answer by the value 109 + 7).

编程算法 - 快速排序(QuickSort)和二分查找(BinarySearch)

快速排序(QuickSort)和二分查找(BinarySearch) 本文地址: http://blog.csdn.net/caroline_wendy 快速排序和二分查找的定义, 网上书上都有, 本文主要是讲解如何写出这两个经典算法. 程序员必须掌握的两种算法, 使用任何语言, 使用纸都是必须的. 快速排序(C): /* * main.cpp * * Created on: 2014年9月10日 * Author: Spike */ #include <stdio.h> #include &