"黑马程序员"数组(Array)学习笔记

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

数组

数组的定义:数组是同一种数据类型的集合,也可以把它看成一个容器。Java语言的数组与js的数组有所区别,js数组可以是不同数据类型的集合,原因在于java是强类型语言,js是弱类型语言。

定义格式:

数据类型[] 数组名 = new 数据类型[];

或者 数据类型 数组名[] = new  数据类型[];

当明确数组的元素的时候,也可以使用静态初始化

数据类型[] 数组名 = {元素1,元素2,元素3,......}

使用数组的优点在于数组中的每个元素都有相应的下表,方便使用与操作。

内存分析:















数组常见的操作:

选择排序法

class ArrayDemo01 //选择排序法
{
	public static void main(String[] args) 
	{
		int[] arr = {10,15,32,65,45};
		printArr(arr);		//排序前输出
		selectSort(arr);	//排序
		printArr(arr);		//排序后遍历数组
	}
	public	static	void printArr(int[] arr)
	{
		for(int i = 0;i<arr.length;i++)
		{
			System.out.println("arr["+i+"]="+arr[i]);
		}
	}
	public	static	void selectSort(int[] arr)
	{
		for(int i = 0;i<arr.length-1;i++)
		{
			for(int j = i;j<arr.length-1;j++)
			{
				if(arr[i]>arr[j+1])
				{
					int temp = arr[i];
					arr[i] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
	}
}


冒泡排序法

class  ArrayDemo
{
	public static void main(String[] args) 
	{
		int[] arr = {24,36,48,1,5};
		printArr(arr);
		bubbleSort(arr);
		printArr(arr);
	}
	public	static	void	bubbleSort(int[] arr){
		for(int i = 0;i<arr.length-1;i++)
		{
			for(int j = 0;j<arr.length-i-1;j++)
			{	if(arr[j]>arr[j+1])
				{
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}

			}
		}
	}
		public	static	void	printArr(int[] arr){
				for(int i = 0;i<arr.length;i++){
			System.out.println("arr["+i+"]: "+arr[i]);
		}
	}
	
}





 

虽然两种排序都能产生同样的结果,但是原理上是不同的。选择排序是选中一个元素后,一次往后按顺序排,冒泡排序,顾名思义,就想冒泡似的大的数据一次往后面移动。我认为两者最明显的区别是前者先确定小角标的元素,后者先确定大角标元素。

 

折半查找法(二分法)

二分查找法需要有序的数组才能进行,int[] arr = {24,36,48,1,5,6,40,80,100};这样的一个数组,首先要进行排序才能用折半查找,所以借用上面的排序程序,直接加入折半的方法

public	static int binSearch(int[] arr,int key)
	{
		int max,mid,min;
		max = arr.length-1;
		min = 0;
		mid = (max+min)>>1; //这里是位运算,右移相当于除以2
		while(min<=max)
		{
			mid = (max+min)>>1; //这里是位运算,右移相当于除以2
			if(arr[mid]>key)
				max = mid-1;
			else if(arr[mid]<key)
				min = mid+1;
			else return mid;
			
		}
		return -mid-1;
	}


折半查找效率较快,节省内存空间。他的原理就是从中间开始查找,若是key比中间的数大,则比中间数小的一半全部舍弃,再从另一半查找,依此类推。

二维数组

二维数组和一位数组用法基本上一样,他就像一个大容器里面装了一些小容器,小容器里面装的是东西。

它的定义格式:

数据类型[][] 数组名 = new 数据类型

其他定义方法和一位数组都类似。

二维数组的遍历需要双重循环的嵌套,当然,三维数组需要三个循环的嵌套。

 

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值