Java系列(9)——数组

版权声明:如需转载,请注明出处 https://blog.csdn.net/qq_36260974/article/details/86590172

数组

  • 定义:所谓数组,是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。

数组定义语法格式

  • 数据类型[] 数组名 = new 数据类型[整数]
  • 整数表示为数组的长度。

第一种定义方式:

int[] arr = new int[5];

第二种定义方式

int[] arr = {56,56,56,56,56};

第三种定义方式:

int[] arr = new int[]{‘a’,’b’,’c’,’d’};//[]里不可以指定长度
  • int 类型初始值都为 0 。
  • 注意:试图获取超过数组下标的值就是数组越界。

数组的内存结构
在这里插入图片描述

  • 在 java 中内存被分为栈和堆,他们都是一块内存空间。
    栈:容量小,存取速度快,适合存储生命周期短的数据,栈中存储变量(局部变量)。特点:先进后出。
    堆:容量小,存取速度快,适合存储生命周期长的数据,堆适合存储对象。
  • 栈里面存变量地址,此地址指向堆中,用的时候去堆里操作。

求极值

  • 遍历:把指定结构的数据全都访问一遍。
    在这里插入图片描述
  • 求极值的方法关键在于树立一个标志。

冒泡排序

  • 冒泡排序的原理是将相邻的两个数逐个的作比较,如果前一个数比后一个数小,那么就交换过来,当一轮结束后最小的值一定产生在末尾。
    在这里插入图片描述
  • 为什么有些情况下会出现,已经排好序列,但是还是会打印出来后面的趟数。原因是设计上实现的是打印array. length-1趟,由于目标组数的最大值没有在最后一位,所以在结果上会看到已经排序成功但还在打印的现象了。如果最大值在最后一位的话,就可以看到最大值从末尾一次一次的移到第一位的过程了。

源码:

public class Welcome
{
	public static void main(String[] args)
	{		
		int[] array = {3,38,5,44,50,15,36,26,27,2,46,4,19,47,48};
		System.out.print("初始:\t");
		printArray(array);
		System.out.println();	
		oderArray(array);
	}
	
	//排序操作
	public static void oderArray(int[] array)
	{			
		for(int i=0;i < array.length; i++)
		{		
			for(int j=0;j < array.length-i-1; j++)
			{				
				if(array[j+1] > array[j])//将大于改为小于就是从小到大
				{								
					int temp = array[j+1];			
					array[j+1] = array[j];
					array[j] = temp;			
				}
				if( j == array.length-i-1-1)
				{
					System.out.println();	
					System.out.print("第"+(i+1)+"趟\t");	
					printArray(array);
				}				
			}								
		}
	}
	
	//输出
	public static void printArray(int[] array)
	{			
		for(int i=0;i<array.length;i++)
		{				
			System.out.print(array[i]+"\t");	
		}		
	 }
}

下图为最大值在最后一位所打印出的效果:
在这里插入图片描述
下图为最大值没有在最后一位所打印出的效果:
在这里插入图片描述

二分查找

  • 二分查找针对有序的数组,效率很高。
  • 二分查找的思想就是利用索引(数组下标)每次都找到排好序后的数组最中间的一个数,然后与需要查找的数进行比较,小于最中间的数,那么所要查找的数就在之前,相反,如果要查找的数大于最中间的数,那么索所要查找的数就在之后,然后再将最中间的数的索引做加一或者减一操作,加一操作时因为索要查找的数在之后,那么将中间数的索引加一后赋值给最小索引,这样,整个数组就相当于去掉了前半部分;减一操作思想相同。继续在新形成的数组里继续如上操作直到找到所要查找的值。

源码:

public class Welcome
{	
	public static void main(String[] args)
	{		
		//注意:二分查找必须先排好序
		int[] array = {1,2,3,4,5,6,7,8,9,25,55};	
		//查找数据 5
		int result = findIndexBinary(array,5);		
		System.out.println("5 的索引是:"+result);	
		
	}
	
	//操作过程	 
	public static int findIndexBinary(int[] array,int num)
	{		
		//定义最小索引
		int minIndex = 0;
		//定义最大索引
		int maxIndex = array.length - 1;
	  //定义中间索引
		int middIndex = (minIndex + maxIndex) / 2;	
		
		while(num != array[middIndex])
		{			
			if(num > array[middIndex])
			{
				minIndex = middIndex + 1;
		 	}
			else
			{ 	
		 		maxIndex = middIndex - 1;
		 	}		
			middIndex = (minIndex + maxIndex) / 2;
		}		
		return middIndex;
	}
}

在这里插入图片描述
数组的倒置

思想:
在这里插入图片描述

  • 执行交换数据操作,这样就实现了数组的倒置

  • 本程序关键在于想到这种方法,然后利用两个数的交换方法来交换数据即可
    在这里插入图片描述
    二维数组

  • 语法格式:数据类型 [] 数组名 = new 数据类型[整数][]

  • 二维数组的第一维必须指定长度。

  • 第一种定义方式:

int[][] array = new int[3][4];
  • 第二种定义方式
int[][] array ={{1,1,1,1},{2,2,2,2},{3,3,3,3}};

源码:

public class Welcome
{
	public static void main(String[] args)
	{		
		/*
		//第一种定义方式
		int[][] array = new int[3][4];
		//第一行
		array[0][0] = 1;
		array[0][1] = 1;
		array[0][2] = 1;
		array[0][3] = 1;
		//第二行
		array[1][0] = 2;
		array[1][1] = 2;
		array[1][2] = 2;
		array[1][3] = 2;
		//第三行
		array[2][0] = 3;
		array[2][1] = 3;
		array[2][2] = 3;
		array[2][3] = 3;
		*/
		
		//第二种定义方式
		int[][] array ={{1,1,1,1},{2,2,2,2},{3,3,3,3}};		
		printArray(array);	
	} 
		
	//输出
	public static void printArray(int[][] array)
	{
		
		for(int i = 0;i < 3;i++)
		{			
			for(int j = 0;j < 4;j++)
			{				
				System.out.print(array[i][j]+"\t");
			}		
			//换行
			System.out.println();
		}	
	} 		
}

在这里插入图片描述
如有错误,欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_36260974/article/details/86590172