数据结构之数组

1.数组

数组是数据结构中一种常用的数据结构,属于线性结构的一种,几乎所有的编程语言都内置原生的数组。

2.数组的声明

int Arr[] =new int [5]  
int [] Arr=new int [5] 
int [] Arr={1,2,3,4,5}

3.数组的类型

在使用数组的时候,要记住数组是引用数据类型。在数组使用之前一定要在内存中开辟一段空间使得数组的引用指向开辟的那段空间,否则数组将出现NullPointerException异常。

public static void main(String[] args) {
			int [] myArr=null;
			System.out.println(myArr[1]);
	}

//  Exception in thread "main" java.lang.NullPointerException

4.数组的引用

java中的数组引用就是让数组b直接指向数组a(即b = a)。在java编程中这样做的目的是为了提高程序运行的效率。

int[] a = new int[10];

int[] b;

b = a;

假如数组中有上万个元素,在拷贝数组时,如果将数组a的所有元素都一一拷贝至数组b,时间开销很大,有时候也不是必需的。

所以,在Java语言中, b = a(a和b都是引用名)的含义就是将a起个别名"b"。

之后,a和b其实就是指向的是同一个对象

在Java中,这种给变量取别名的机制称之为引用(reference)。数组变量名也就是一种引用

 

5.数组的内存分配问题

哪些是引用数据类型?  在JAVA中除了8大基本数据类型,其他都是引用类型。

数组声明后,实际是在内存的内存中开辟一块区域用来存储数组的变量名称,并且同时在内存的内存中开辟一块区域用来存储数组所需要的元素的个数,接着使得数组的变量名称指向堆内存里面所对于的逻辑地址值,开辟新的堆内存要用到关键字New.

score = new int[3];

 注意:在使用关键字new进行数组初始化完成后,该数组的长度是不可以改变的。

  既然数组的大小不可以改变,那为什么下面的语法又不会出错呢?

public static void main(String[] args){

    int score[] = new int [4]
    int score[] = new int [10]         // 正确
}

我们直观上看到score数组长度大小发生了变化。但在内存当中实际是new关键字重新向栈内存申请了一块大小为10的区域,而不是在先前大小为4的区域上添加大小为6的区域所构成大小为10的区域。这种方法在当数据较大的情况下会造成内存资源的极大浪费,所以不推荐使用。

6.数组的常见操作

  • 数组的遍历
			int myArry[]=new int[] {1,2,3,4,5};
			for (int i : myArry) {
				System.out.println(i);

 

  • Insert——在指定索引位置插入一个元素                   
  • Get——返回指定索引位置的元素                                       //  例题日后补充
  • Delete——删除指定索引位置的元素
  • Size——得到数组所有元素的数量

7.数组查找算法

  • 顺序查找:顺序查找又称为线性查找,是一种最简单的查找方法。如果元素数量太多,这种方法的性能将会及低。
  • 二分法查找(又名折半查找):比较有效,但是前提是数组元素必须有序。

java代码实现

使用递归实现折半查找

public static int BinarySearch(int[] arr,int key,int low,int high){
		
		if(key < arr[low] || key > arr[high] || low > high){
			return -1;				
		}
		
		int middle = (low + high) / 2;			//初始中间位置
		if(arr[middle] > key){
			return BinarySearch(arr, key, low, middle - 1);
		}else if(arr[middle] < key){
			return BinarySearch(arr, key, middle + 1, high);
		}else {
			return middle;
		}	
}

时间复杂度:在最坏情况下设查找的次数为x   则满足 2^x = n      x=log2  n      f(n)=O(log2 n)

8.数组排序算法  (八大排序算法)

 

    引用文章:https://cuijiahua.com/blog/2018/01/alogrithm_9.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值