顺序查找
基本思想
代码实现
//第一种:顺序查找 public Type SequenceSearch(Type[] list,Type t) { for(Type temp : list) { if(temp.equals(t)) return temp; } return null; }
分块查找
基本思想
二分查找
基本思想
代码实现
//第二种:二分查找,这里用int类型数组举例,找到中间元素的索引 //非递归 public int BinarySearch(int[] list,int value) { int low = 0,high = list.length-1,mid; while (low<=high) { mid = (low+high)/2; if(list[mid] == value)//如果是寻找String,就用equal return mid; if(list[mid]>value) high = mid-1; if(list[mid]<value) low=mid+1; } return -1; } //递归 public int BinarySearch(int[] list,int value,int low,int high) { int mid = (low+high)/2; if(list[mid] == value)//如果是寻找String,就用equal return mid; if(list[mid]>value) return BinarySearch(list,value,low,mid-1); if(list[mid]<value) return BinarySearch(list,value,mid+1,high); else return -1; }
插值查找
基本思想
代码实现
//第三种:插值查找,用int类型数组举例 public int InsertSearch(int[] list,int value,int low,int high) { int mid = low+(value-list[low])/(list[high]-list[low])*(high-low); if(list[mid] == value)//如果是寻找String,就用equal return mid; if(list[mid]>value) return InsertSearch(list,value,low,mid-1); if(list[mid]<value) return InsertSearch(list,value,mid+1,high); else return -1; }
斐波那契查找
基本思想
代码实现
package Searching; import java.util.Arrays; /** * @Author: 胡奇夫 * @QQ: 1579328766 * @CreateTime: 2020-05-17-14-05 * @Descirption: 斐波那契查找算法 */ public class Fibonaccialo { public static void main(String[] args) { int arr[] = {2,4,9,10,13,15,16,19,34}; System.out.println(FibonacciSearch(arr,34)+1); } //创建斐波那契数列 public static int[] Fibonacci(int n) { int[] FibonacciList = new int[n]; FibonacciList[0] = 0; FibonacciList[1] = 1; for (int i = 2; i < n; i++) { FibonacciList[i] = FibonacciList[i - 1] + FibonacciList[i -2]; } return FibonacciList; } //斐波那契查找,返回的是value在list中的索引值,所以在最后可以加一,为了看出效果,我在上面打印的时候再加一 public static int FibonacciSearch(int[] list,int value) { int low = 0; int high = list.length -1; int k = 0;//表示斐波那契分割的值 int mid = 0;//存放黄金分割点的值 int f[] = Fibonacci(20);//斐波那契数列 //找k值 while (high>f[k] - 1){ k++; } //复制到新的数组 int temp[] = Arrays.copyOf(list,f[k]); //得到f[k]的值可能会大于a的长度,将新数组的多余的部分用数组中的最后一个数字填充 for (int i = high+1; i <temp.length ; i++) { temp[i] = list[high]; } //使用while循环,找到value的位置 while (low<=high){//满足这个条件就可以继续找 mid = low+f[k-1]-1;//找到的黄金分割点 if(value<temp[mid]){ high = mid - 1; k--; }else if(value>temp[mid]){ low = mid + 1; k-=2; }else{ if(mid<=high){ return mid; }else { return high; } } } return -1; } }
总结
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算