`

java数据结构与算法---有序数组的二分查找

 
阅读更多

之前学校开了数据结构这门课,是C语言版的,没认真学,只好现在来补一补了皱眉

首先要说的是必须是有序的,不然是没办法用二分法查找的

1.有序数组优缺点

优点:查找速度(采用二分查找法)比无序数组快很多(查找的数据量越大,优势越明显)

下面是一组用二分法查找的数据:

数据量                                                               所需比较次数

10                                                                            4

100                                                                          7

1000                                                                        10

10000                                                                      14

100000                                                                    17

1000000                                                                   20

10000000                                                                 24

100000000                                                               27

缺点:插入时需要将后面的元素进行移动

2.然后下面是我实现有序数组二分查找的代码:

package ordarray;
/**
 * 有序数组
 * @author zhang
 *
 */
public class OrdArray {
	private long[] a;
	private int nElems;
	
	public OrdArray(int max){
		a= new long[max];
		nElems=0;
	}

	//二分查找方法
	public int find(long serachKey){
		int lowerBound=0;
		int upperBound=nElems-1;
		int curIn;
		while(true){
			curIn=(lowerBound+upperBound)/2;
			if(a[curIn]==serachKey){
				return curIn;
			}else if(lowerBound>upperBound){
				return nElems;
			}else{
				if(a[curIn]<serachKey){//往后查
					lowerBound=curIn+1;//改变最小索引
				}else{//往前查
					upperBound=curIn-1;//改变最大索引
				}				
			}
		}
	}
	//二分法删除
	public boolean delete2(long value){
		int i=find(value);
		if(i==nElems){
			return false;
		}else{
			for(int j=i;j<nElems;j++){
				a[j]=a[j+1];
			}
			nElems--;
			return true;
		}
	}
	
	public int size(){//查看大小,元素个数
		return nElems;
	}
	
	//添加数据(线性查找添加)插入一定是可以插入的,不像删除要查看要删除的元素是否存在
	//从小到大排序插入
	public void insert(long value){
		int i;
		for(i=0;i<nElems;i++){
			if(a[i]>value){
				break;
			}
		}
		//j>i每次判断j是否大于我们停止的i位置
		for(int j=nElems;j>i;j--){
			//必须从最后一个开始移
			a[j]=a[j-1];				
		}
		//最后插入我们要插入的元素
		a[i]=value;	
		nElems++;
	}
	
	//删除
	public boolean delete(long value){
		int i;
		for(i=0;i<nElems;i++){
			if(a[i]==value){
				break;
			}
		}
		if(i==nElems){
			System.out.println("删除失败,没有"+value+"这个值");
			return false;
		}else{
			for(int j=i;j<nElems;j++){
				a[j]=a[j+1];
			}
			nElems--;
			return true;
		}			
		
	}
	
	public void display(){
		for(int i=0;i<nElems;i++){
			System.out.print(a[i]+" ");
		}
		System.out.println();
	}
}

 

package ordarray;

public class OrderedApp {
	public static void main(String[] args) {
		int maxSize=100;
		OrdArray arr;
		arr=new OrdArray(maxSize);
		arr.insert(77);
		arr.insert(66);
		arr.insert(76);
		arr.insert(79);
		arr.insert(44);
		arr.insert(55);
		arr.insert(34);
		arr.insert(23);
		arr.insert(66);
		arr.insert(97);
		int serachKey=76;
		if(arr.find(serachKey)!=arr.size()){
			System.out.println("找到了"+serachKey);
		}else{
			System.out.println("没有找到"+serachKey);
		}
		arr.display();
		
		arr.delete2(23);
		arr.delete2(66);
		arr.display();
	}
}

 

分享到:
评论

相关推荐

    数据结构与算法--Java语言描述

    典型的算法包括排序(如冒泡排序、选择排序、插入排序、快速排序、归并排序等)、查找(线性查找、二分查找、哈希查找等)、图的遍历(深度优先搜索DFS和广度优先搜索BFS)、动态规划、贪心算法以及回溯法等。...

    Java数据结构和算法-学习笔记

    ### Java数据结构与算法——学习笔记 #### 一、引言 在计算机科学领域,**数据结构**与**算法**是两个极其重要的概念。数据结构指的是数据的组织方式,而算法则是解决特定问题的一系列步骤。这两者是编程的基础,...

    java数据结构和算法学习笔记

    ### Java数据结构与算法学习笔记知识点总结 #### 一、数据结构概述 数据结构是对数据的一种组织形式,它决定了数据的存储方式以及处理数据的方法。常见的数据结构包括但不限于数组、链表、栈、队列、二叉树、图等...

    Java数据结构与算法(第二版)

    ### Java数据结构与算法(第二版) #### 数据结构概述 数据结构是计算机科学的一个核心概念,它主要关注如何在计算机程序中组织、管理和存储数据,以便可以高效地访问和修改这些数据。良好的数据结构选择能够极大...

    Java 数据结构与算法+源代码 高清版

    这里涉及的主要算法类型有排序算法(如冒泡排序、快速排序、归并排序、堆排序)、查找算法(如线性搜索、二分查找)、图算法(如深度优先搜索、广度优先搜索)以及动态规划、贪心算法和回溯法等。排序算法用于调整...

    JAVA数据结构与算法

    在编程领域,数据结构与算法是核心基础,对于任何编程语言,包括Java,理解并熟练掌握它们至关重要。本文将深入探讨Java中的数据结构与算法,旨在帮助开发者提升问题解决能力和程序设计技巧。 首先,我们来看数据...

    数据结构与算法--java版本

    ### 数据结构与算法——Java版本 #### Java与面向对象程序设计 ... - 与直接插入排序类似,但在插入前使用二分查找确定插入位置。 - **希尔排序:** - 一种改进的插入排序,通过引入增量序列来提高效率。

    Java数据结构和算法(第二版),算法经典案例(C语言)

    - **查找算法**:线性查找、二分查找、哈希查找等,其中二分查找在有序数组中非常高效。 - **图算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、Dijkstra算法、Floyd算法等用于解决最短路径问题。 - **动态...

    Java数据结构和算法学习笔记

    ### Java数据结构与算法学习笔记知识点详解 #### 一、数据结构概述 数据结构是对数据的一种组织形式,它决定了数据的存储方式以及处理数据的方法。常见的数据结构包括但不限于数组、链表、栈、队列、二叉树、图等...

    java数据结构于算法(第二版)_书中示例代码

    Java数据结构与算法是计算机科学中的基础且至关重要的部分,它们是解决问题和设计高效程序的核心。本书《Java数据结构与算法(第二版)》显然深入探讨了这些主题,旨在帮助读者提升编程技能和理解复杂问题的解决策略...

    数据结构与算法.pdf

    数据结构与算法是计算机科学的基础,对于理解和解决复杂问题至关重要。在Java这门面向对象的编程语言中,数据结构和算法的实现具有独特的优势。本文将深入探讨Java中常见的数据结构,包括链表、树、图、数组和队列,...

    数据结构与算法经典问题解析-Java语言描述

    - **二分查找**:在有序数组中查找目标元素,时间复杂度为O(log n)。 3. **递归与动态规划**: - **递归**:函数直接或间接调用自身,常用于解决分治问题,如斐波那契数列。 - **动态规划**:通过将原问题分解...

    Java数据结构与算法

    这些基础知识构成了Java数据结构与算法的核心,理解并熟练运用它们,将极大地提升程序员的编程能力和解决问题的效率。在实际开发中,合理地选择和设计数据结构,优化算法,可以编写出更高效、更简洁的代码。

    数据结构与算法分析(java版内含源代码)

    《数据结构与算法分析》是计算机科学领域的一本经典著作,尤其在Java版本中,它深入探讨了如何在Java编程语言中实现各种数据结构和算法。这本书不仅提供了理论知识,还通过提供源代码实例,帮助读者更好地理解和应用...

    数据结构与算法-单路递归 Single Recursion

    总结而言,本文通过介绍算法与数据结构的基本概念,并深入探讨了二分查找这一经典算法的原理与实现细节,帮助读者更好地理解和掌握相关的基础知识。此外,还介绍了单路递归的概念及其与二分查找之间的联系,为进一步...

    算法-数据结构和算法-3-顺序表.rar

    - **线性搜索与二分搜索**:在有序的顺序表中,二分搜索可以大大提高查找效率。 这个压缩包中的“数据结构和算法-3-顺序表.pdf”很可能是详细讲解顺序表的教程或笔记,包括其原理、操作、优缺点以及实践示例。通过...

    数据结构与算法 Java版

    在Java中,常见的算法包括排序(如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序)、查找(如顺序查找、二分查找)、图算法、动态规划、回溯法、贪心算法等。理解并熟练掌握这些算法能够帮助开发者优化...

    2018JAVA经典教程:数据结构与算法经典问题解析-Java语言描述

    《2018JAVA经典教程:数据结构与算法经典问题解析》是一本深入探讨Java语言中数据结构和算法实现的教程。这本书旨在帮助读者理解并掌握如何使用Java有效地设计和解决各种计算问题。数据结构是计算机科学的基础,而算...

Global site tag (gtag.js) - Google Analytics