zoukankan      html  css  js  c++  java
  • Java顺序查找、二分查找

    Java顺序查找、二分查找

      查找算法中顺序查找算是最简单的了,无论是有序的还是无序的都可以,只需要一个个对比即可,但其实效率很低。

    顺序查找

    动图演示

    顺序查找

    详细代码

          // 顺序查找
          public static boolean search(int[] arrray, int key) {
    		for (int i = 0; i < arrray.length; i++) {
    			if (arrray[i] == key) {
    				return true;
    			}
    		}
    		return false;
    	}
    

    二分查找

      二分法查找适用于大的数据,但前提条件是数据必须是有序的,他的原理是先和中间的比较,如果等于就直接返回,如果小于就在前半部分继续使用二分法进行查找,如果大于则在后半部分继续使用二分法进行查找。

    动图演示

    二分查找

    详细代码

          // 非递归
    	public static boolean binarySearch1(int[] array,int key) {
    		int low = 0;
    		int high = array.length-1;
    		while(low <= high) {
    			int middle = low + (high-low)/2;
    			if(key==array[middle]) {
    				return true;
    			}
    			if(key>array[middle]) {
    				low = middle + 1;
    			}
    			if(key<array[middle]) {
    				high = middle - 1;
    			}
    		}
    		return false;
    	}
    	// 递归
    	public static boolean binarySearch2(int[] array,int key) {
    		int low = 0;
    		int high = array.length - 1;
    		Arrays.sort(array); // 排序
    		return Search(array,key,low,high);
    	}
    	public static boolean Search(int[] array,int key,int low,int high) {
    		int mid = low + (high - low)/2;
    		if(low>high) {
    			return false;
    		}
    		if(key == array[mid]) {
    			return true;
    		}
    		if(key>array[mid]) {
    			return Search(array,key,mid+1,high);
    		}
    		return Search(array,key,low,mid-1);
    	}
    
    
  • 相关阅读:
    Algs4-1.3.37Josephus问题
    Algs4-1.3.35随机队列
    Algs4-1.3.33一个双向队列Deque的可变长环形数组实现
    Algs4-1.3.34随机背包
    Algs4-1.3.33一个双向队列Deque-双向链表实现
    Algs4-1.3.32链表实现Stack和Queue的合体Steque
    Algs4-1.3.31实现双向链表
    Algs4-1.3.30反转链表
    C语言多级指针
    spring mvc@ModelAttribute与@SessionAttributes的执行流程
  • 原文地址:https://www.cnblogs.com/lyhLive/p/13334699.html
Copyright © 2011-2022 走看看