zoukankan      html  css  js  c++  java
  • 【算法学习】02---二分算法总结

    算法学习---基础

    tags:算法

    二分查找

    • 1.1 Java基本编程
    • 1.2 数据抽象
    • 1.3 背包,队列和栈
    • 1.4 算法分析

    二分查找

    算法

    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
    

    算法分析

    1,程序接收2个参数,一个有序数组int[] a,一个查找关键字key
    2,循环比较数组中间关键字的结果,判断是否在那个区间中
    3,不断分割与保存新的数组
    
    st=>start: Start
    op=>operation: mid =(a.length-1)/2
    cond=>condition: mid=key or mid!=key?
    e=>end
    
    st->op->cond
    cond(yes)->e
    cond(no)->op
    

    自然语言描述

    实现一个rank方法,接收2个参数,一个数组int,一个整数键key。如果key存在于数组中则返回它的索引,否则返回-1.
    算法使用2个变量lo和hi,并保证如果在数组中则它一定在a[lo,h1]中,然后方法进入一个循环,不断的将数组的中间键mid和key比较,如果相等,则返回mid的索引,否则算法就讲缩减一半,如果key>a[mid],则找a[mid,hi]否则找a[lo,mid],直到a[mid]=key或者为空a[lo,h1]改过程结束。
    

    java代码示例

    public class BinarySearch {
    	/**
    	 * 
    	 * @param key 一个被查的key值
    	 * @param a 一个数组
    	 * @return 返回key在数组中的索引
    	 */
    	public static int rank(int key, int[] a) {
    		//init
    		Arrays.sort(a);
    
    		int lo = 0;
    		int hi = a.length - 1;
    
    		while ((lo <= hi) && (lo <= a.length - 1) && (hi <= a.length - 1)) {
    			int mid = lo + (hi - lo) / 2;
    			if (key == a[mid]) {
    				return mid;
    			} else if (key < a[mid]) {
    				hi = mid - 1;
    			} else {
    				lo = mid + 1;
    			}
    		}
    		return -1;
    	}
    
    
    	public static void main(String[] args) {
    		int[] dateList = { 121,88,98, 84, 1, 123, 111 };
    		Arrays.sort(dateList);
    		int key = -1;
    		int keyIndex = rank(key, dateList);
    		System.out.println(keyIndex);
    	}
    
    }
    
    

    结果分析

    • [ ] 必须采用顺序存储结构
    • [ ] 必须按关键字大小有序排列。

      安装书中的代码执行没有成功,调整了一下
  • 相关阅读:
    对我影响最大的三位老师
    自我介绍
    第二周作业
    2019第一次作业
    PTA编程总结3
    币值转换
    PTA编程总结2
    PTA编程总结1
    秋季学期学习总结
    人生路上对你影响最大的三位老师
  • 原文地址:https://www.cnblogs.com/hylinux/p/6868162.html
Copyright © 2011-2022 走看看