查找

哈哈,在程序里面,查找也是很重要的。下面给出简单的几种查找...

package net.itaem.search;

import java.util.Arrays;
import java.util.Random;

/**
 * 顺序查找
 * */
public class Search {

	private int[] search = new int[Integer.MAX_VALUE/32];
	private Random random = new Random();

	public Search(){
		for(int i=0; i<Integer.MAX_VALUE/32; i++){
			search[i] = i;
		}

	}

	//顺序查找
	//逐个遍历
	public int iterSearch(int key){
		for(int i=0; i<search.length; i++){
			if(search[i] == key){
				return i;
			}
		}

		//代表没有找到
		return -1;
	}

	//折半查找
	//前提条件:这个带查找集合是已经排序好的集合
	public int binarySearch(int key){

		//第一步:先排序带查找的数组,测试时,因为数据本身已经排序好了,不需要执行
		//Arrays.sort(search);
		int low = 0;  //低位
		int high = search.length - 1;   //高位

		int middle = -1;
		while(low < high){
			middle = (low + high)/2;
			int var = search[(low + high)/2];
			if(key > var){
				low = middle + 1;  //往大的方向移动一位
			}else if(key < var){
				high = middle;    //往小的方向移动一位
			}else{
				return middle;   //找到了直接返回
			}
		}

		return middle;
	}

	//插值查找
	//注意:是插值查找,不是插入排序
	public int interpolationSerach(int key){
		//前提条件:该集合数组排序好
		//第一步:先排序带查找的数组,测试时,因为数据本身已经排序好了,不需要执行
		//Arrays.sort(search);
		int low = 0;  //低位
		int high = search.length - 1;   //高位

		int middle = -1;
		while(low < high){
			middle = low + (high-low) * (search[high] - search[low]);   //优化middle...
			middle = (low + high)/2;
			int var = search[(low + high)/2];
			if(key > var){
				low = middle + 1;  //往大的方向移动一位
			}else if(key < var){
				high = middle;    //往小的方向移动一位
			}else{

				return middle;   //找到了直接返回
			}
		}

		return middle;
	} 

	public int fibonacciSearch(int key){
		return -1;
	}

	public static void main(String[] args) {
		Search search = new Search();

		System.out.println("=====================iterator search================");
		System.out.println(99999 + " in " + search.iterSearch(99999));

		System.out.println("=================binary serach=========================");
		System.out.println(99999 + " binary serach " + search.binarySearch(99999));

		System.out.println("=================interpolation serach=========================");
		System.out.println(99999 + " interpolation serach " + search.interpolationSerach(99999));

	}
}

查找

时间: 2024-11-05 04:57:23

查找的相关文章

jQuery父级以及同级元素查找的实例

父级以及同级元素的查找在使用过程中还是蛮频繁的,下面为大家介绍下jQuery是如何实现的,感兴趣的朋友可以参考下 jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(expr),但是是查找所有祖先元素,不限于父元素 jQuery.children(

二分查找

递归版(在区间[x, y)中找v的位置) 1 //递归版二分查找 2 int bsearch(int * A, int x, int y, int v) 3 { 4 5 if(v<a[x] || v>a[y-1]) return -1; 6 int m = x + (y-x)/2; //此处能不能用int m = (x+y)/2,需要仔细考虑(暂时想不到原因) 7 if(A[m]==v) return m; 8 else if(A[m]>v) return bsearch(A, x, m

排序与查找

1.冒泡法排序 2.选择排序 3.二分法查找(有序数组) 4.无序数组(基本查找)

查找结点,创建节点,插入节点

1.查找节点介绍 2.创建节点 3.插入节点 4.程序(查找,并操作属性与文本节点) 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 <script type="text/javascript" src="jquery-3.2.1.m

使用XHProf查找PHP性能瓶颈

XHProf是facebook 开发的一个测试php性能的扩展,本文记录了在PHP应用中使用XHProf对PHP进行性能优化,查找性能瓶颈的方法. 安装Xhprof扩展 $ wget http://pecl.php.net/get/xhprof-0.9.4.tgz $ tar -zxvf xhprof-0.9.4.tgz $ cd xhprof-0.9.4 $ cd extension/ $ phpize $ ./configure $ make $ sudo make install 修改ph

排序、查找算法

1> 插入排序 //插入排序(把第一个当作也排好序,然后对后面的依次插入到已排好序的队列中)平均时间复杂度0(n^2) public void insertSort(int[] a){ for(int i = 1;i<a.length;i++){ for(int j = i;j > 0;j--){ if(a[j] < a[j-1]){ int tmp = a[j]; a[j] = a[j-1]; a[j-1] = tmp; } } } } 2> 希尔排序 /*希尔排序:平均时

二分查找总结

最近刷leetcode和lintcode,做到二分查找的部分,发现其实这种类型的题目很有规律,题目大致的分为以下几类: 1.最基础的二分查找题目,在一个有序的数组当中查找某个数,如果找到,则返回这个数在数组中的下标,如果没有找到就返回-1或者是它将会被按顺序插入的位置.这种题目继续进阶一下就是在有序数组中查找元素的上下限.继续做可以求两个区间的交集. 2.旋转数组问题,就是将一个有序数组进行旋转,然后在数组中查找某个值,其中分为数组中有重复元素和没有重复元素两种情况. 3.在杨氏矩阵中利用二分查

Linux里如何查找文件内容

Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e “正则表达式” 文件名 查找时不区分大小写:$ grep –i "被查找的字符串" 文件名 查找匹配的行数:$ grep -c "被查找的字符串&quo

猪八戒吃西瓜(wmelon)-排序-查找

问题 A: 猪八戒吃西瓜(wmelon) 时间限制: 1 Sec  内存限制: 64 MB提交: 30  解决: 14[提交][状态][讨论版] 题目描述 有一天,贪吃的猪八戒来到了一个大果园,果园里有n(n≤100000)个大西瓜,每个西瓜 的质量不大于长整型(longint),并且每个西瓜的质量都不同.猪八戒非常无聊,先把所有的西瓜按从小到大排列,然后再选m(m≤l00000)个质量是Ki的西瓜,请你帮他把想吃的西瓜找出来. 输入 第1行输入n,然后以下n行输入n个整数: 接着输入m,然后以

顺序表查找和有序表查找

查找里面顺比表查找和有序表查找(包括二分查找,插值查找,斐波那契查找)比较简单,直接贴代码,代码里面有详细注释. 1 #include <iostream> 2 using namespace std; 3 4 //顺序表查找(线性查找.静态表查找) 时间复杂度为O(n) 5 int Seq_Search(int *s,int n,int key) 6 { 7 s[0] = key; //设置了一个哨兵,避免了每次比较一次过后都要判断查找位置是否越界 8 int i = n; 9 while