黑马程序员:数组和数组的操作

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

1、概述

数组是同一种类型数据的集合,数组是一个数据的容器。可以自动给数组中的元素进行编号。

java中数组的定义: ①int[] arr = new int[3];、②int [] arr = new int[]{1,2,3};、③int[] arr = {1,2,3};这三种方式都可以正确的创建数组。

从上面数组的定义,我们知道,创建一个数组和创建一个对象一样,都是使用new关键字来创建。当new关键字创建一个数组时,会在堆内存中开辟一片内存存储数组对象,并提供一个首地址,栈内存中的数组变量通过首地址访问数组。

当数组被创建后,都有默认的初始化值,我们可以通过数组下标,来设置或者取出指定的数组元素。数组的下标从0开始,length-1结束。注意,第一个元素的下标是0,而不是1。

在使用数组脚标时常见的异常:ArrayIndexOutOfBoundsException(数组越界异常),例如:数组arr的length为2,当试图取出arr[2],就会出现这个异常。

2、遍历数组:使用指定格式打印数组元素。

	public static void arrayPrint(int[] arr){
		System.out.print("[");
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]);
			if(i == arr.length-1){
				System.out.println("]");
			}
			else{
				System.out.print(",");
			}
		}
	}

3、数组的排序

①选择排序:(升序)

第一趟:用第一个元素,与后面的元素逐个比较,碰到比第一个元素小的,则交换值,再与后面的元素进行比较,直到得出最小值,把最小值放在第一个位置。

第二趟:用第二个元素,与后面的元素逐个比较,碰到比第二个元素小的,则交换值,再与后面的元素进行比较,直到得出最小值,把最小值放在第二个位置。

..............

第n-1趟:用第n-1个元素,与第n个元素比较,取得小值放在第n-1位置。排序结束

编码如下:

	public static void selectSort(int[] arr){
		for(int i=0;i<arr.length-1;i++){
			for(int j=i+1;j<arr.length;j++){
				int temp = 0;
				if(arr[i]>arr[j]){
					temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
	}

②冒泡排序法:相邻的两个元素进行比较,符合则换位。第一趟完成后,得到了一个最大值(升序时),并且最大值的位置是length-1。也就是说,每趟完成后,都得到一个最大值,并将这个最大值放在每一趟的最后一个位置。第一趟最大值存放的位置是(length-1),第二趟是(length-2),....,第length趟的最大值在0位置。结束

编码如下:

	public static void bubbleSort(int[] arr){
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr.length-i-1;j++){ //for中的“arr.length-i-1”,其中“-i”每一趟结束后,就减少一个进行比较的元素,“-1”是为了避免数组越界。
				int temp = 0;
				if(arr[j]>arr[j+1]){
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
	}
③查找操作:

普通查找方式:查找某个数在数组中的位置,如果存在则返回正确的位置,如果不存在,则返回-1

	public static int getIndex(int[] arr ,int key){
		for(int i=0;i<arr.length;i++){
			if(arr[i] == key){
				return i;
			}
		}
		return -1;
	}
折半查找:这种查找方式效率高,但是必须要保正数组是有序的。
	public static int halfSearch(int[] arr,int key){
		int min = 0;//定义最小脚标,并初始化,初始最小脚标是0
		int max = arr.length-1;//定义最大脚标,并初始化,初识最大脚标是length-1
		int mid;//定义中间脚标
		while(min<=max){
			mid = (min + max)/2;//初始化中间脚标,中间脚标等于最小脚标加上最大脚标,除以2
			if(key > arr[mid]){ //如果待查找的数比第mid位置的元素大,说明该元素可能位于第mid位置之后
				min = mid + 1;//于是,把最小脚标设置为(mid+1);
			}else if(key < arr[mid]){ //反之,如果小于,则说明该元素可能位于第mid位置之前
				max = mid - 1; //于是,把最大脚标设置为(mid-1)。
			}else{
				return mid; //如果相等,则查找结束。
			}
		}
		return -1; //找不到相应的元素,则返回-1
	}

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值