黑马程序员 --- 数组

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


数组的定义:

同一种类型数据的集合。其实数组就是一个容器。

可以自动给数组中的元素从0开始编号,方便操作这些元素。

格式1:
元素类型[] 数组名= new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名= new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7}

获取数组中的最大最小值;

/*
给定一个数组{5,1,6,4,2,8,9}。

1,获取数组中的最大值,以及最小值。


*/

class ArrayTest 
{

	public static int getMax(int[] arr)
	{
		int max = arr[0];

		for(int x=1; x<arr.length; x++)
		{
			if(arr[x]>max)
				max = arr[x];
		}
		return max;
	}


	public static int getMax_2(int[] arr)
	{
		int max = 0;

		for(int x=1; x<arr.length; x++)
		{
			if(arr[x]>arr[max])
				max = x;
		}
		return arr[max];
	}


	/*
	获取最小值。
	*/
	public static int getMin(int[] arr)
	{
		int min = 0;
		for(int x=1; x<arr.length; x++)
		{
			if(arr[x]<arr[min])
				min = x;
		}
		return arr[min];
	}

	//获取double类型数组的最大值。因为功能一致,所以定义相同函数名称。以重载形式存在。
	/*
	public static double getMax(double[] arr)
	{
		
	}
	*/
	public static void main(String[] args)
	{
		int[] arr ={5,1,6,4,2,8,9};

		int max = getMax_2(arr);
		int min = getMin(arr);
		System.out.println("max="+max);
		System.out.println("min="+min);


//		boolean[] ar = new boolean[3];
//		System.out.println(ar[1]);
	}

}

折半查找

import java.util.*;
class ArrayTest4 
{
	public static void main(String[] args) 
	{
//		int[] arr = {3,2,1,5,4,2,9};
//		int index = getIndex(arr,2);
//		System.out.println("index="+index);

		int[] arr = {2,4,5,7,8,19,32,45};//8

		int index = getIndex_2(arr,190);
		System.out.println("index="+index);
		
//		int x = Arrays.binarySearch(arr,190);//java提供好的一个进行折半查找的功能。开发时使用这个。
//		System.out.println("x="+x);
		

	}

	public static int getIndex_2(int[] arr,int key)
	{
		int min = 0,max = arr.length-1,mid;

		while(min<=max)
		{
			mid = (max+min)>>1;

			if(key>arr[mid])
				min = mid + 1;
			else if(key<arr[mid])
				max = mid - 1;
			else
				return mid;
		}
		return min;
	}

	/*
	折半的第二种方式。
	*/
	public static int halfSearch_2(int[] arr,int key)
	{
		int min = 0,max = arr.length-1,mid;

		while(min<=max)
		{
			mid = (max+min)>>1;

			if(key>arr[mid])
				min = mid + 1;
			else if(key<arr[mid])
				max = mid - 1;
			else
				return mid;
		}
		return -1;
	}
	/*
	折半查找。提高效率,但是必须要保证该数组是有序的数组。
	*/
	public static int halfSearch(int[] arr,int key)
	{
		int min,max,mid;
		min = 0;
		max = arr.length-1;
		mid = (max+min)/2;

		while(arr[mid]!=key)
		{
			if(key>arr[mid])
				min = mid + 1;
			else if(key<arr[mid])
				max = mid - 1;

			if(min>max)
				return -1;
			mid = (max+min)/2;
		}
		return mid;
	}





	//定义功能,获取key第一次出现在数组中的位置。如果返回是-1,那么代表该key在数组中不存在。
	public static int getIndex(int[] arr,int key)
	{
		for(int x=0; x<arr.length; x++)
		{
			if(arr[x]==key)
				return x;
		}
		return -1;
	}
}


数组排序——选择排序

public class ArrayDemo5 {
	public static void main(String[] args)
	{
		int[] arr={3,6,7,9,1,4};//定义一个数组
		selectSort(arr);//调用排序方法
		printArray(arr);//打印排序后数组
	}

	public static void selectSort(int[] arr)//定义一个方法,用于元素从小到大排序
	{
		for(int x=0;x<arr.length-1;x++)//定义for循环从数组第一个元素开始和后面每个元素比较
		{
			for(int y=x+1;y<arr.length;y++)
			{
				if(arr[x]>arr[y])//如果前面的大于后面的则换位置
				{
					int temp=arr[x];
					arr[x]=arr[y];
					arr[y]=temp;
				}
			}
		}
	}
	public static void printArray(int[] arr) //打印数组方法
	{
		for(int x=0;x<arr.length;x++)
		{
			if(x!=arr.length-1)
			{
				System.out.print("["+arr[x]+"]"+",");
			}
			else
				System.out.println("["+arr[x]+"]");
		}
		
	}
}

数组排序——冒泡排序
public class BubbleSort {
	public static void main(String[] args)
	{
		int [] arr={5,2,7,1,6};//定义一个数组
		BubSort(arr);//调用冒泡排序
		printArray(arr);//打印排序后数组
	}
	public static void BubSort(int[] arr)//定义冒泡排序方法
	{
		for(int x=0;x<arr.length-1;x++)
		{
			for(int y=0;y<arr.length-x-1;y++)
			{
				if(arr[y]>arr[y+1])//如果前面元素大于后面的元素则置换
				{
					int temp=arr[y];
					arr[y]=arr[y+1];
					arr[y+1]=temp;
				}
			}
		}
	}
	public static void printArray(int[] arr) //打印数组
	{
		for(int x=0;x<arr.length;x++)
		{
			if(x!=arr.length-1)
			{
				System.out.print("["+arr[x]+"]"+",");
			}
			else
				System.out.println("["+arr[x]+"]");
		}
		
	}
}


二维数组[][]
格式1:int[][] arr = new int[3][2];
定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0], arr[1], arr[2]
给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值null
可以对这个三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
定义一个名称为arr的二维数组
二维数组中的有三个一维数组
每一个一维数组中具体元素也都已初始化
第一个一维数组arr[0] = {3,8,2};
第二个一维数组arr[1] = {2,7};
第三个一维数组arr[2] = {9,0,1,6};
第三个一维数组的长度表示方式:arr[2].length;
注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值