JAVA学习之数组(排序,折半查找)

一、数组定义
同一种类型数据的集合,其实数组就是一个容器
数组定义格式:
1.数据类型[] 变量名 = new 数据类型[数组长度]
int[] arr = new int[5];
2.数据类型[] 数组名 = new 数据类型[]{元素,元素,.....};
int[] arr = new int[]{3,5,4,9};
int[] arr = {3,5,8,9};
二、数组遍历
int[] arr = new int[3];
for(int i=0;i<arr.length;i++)
{
 System.out.println(arr[i]);
}
获取最值(最大值、最小值)
int[] arr=new int[5];
		
int temp=arr[0];
for(int i=1;i<arr.length;i++)
{
	if(temp<arr[i])
	{
		temp = arr[i];
	}
}
三、数组排序(Arrays.Sort(arr))
常见的排序方式:选择排序和冒泡排序
①、选择排序
最值出现在第一位
代码:
for(int i=0;i<arr.length-1;i++)
{
	for(int j=i+1;j<arr.length;j++)
	{
		if(arr[i]>arr[j])
		{
			int temp =arr[i];
			arr[i]=arr[j];
			arr[j]=temp;
		}
	}
}
 
②、冒泡排序
最值出现在最后位置
 

 代码:

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 int halfSearch(int[] arr,int key)
	{
		int min=0;
		int max=arr.length-1;
		int mid=(min+max)/2;
		while(arr[mid]!=key)
		{
			if(min>max)
			{
				return -1;
			}
			if(arr[mid]<key)
			{
				min=mid+1;
			}else if(arr[mid]>key)
			{
				max=mid-1;
			}
			mid=(min+max)/2;
		}
	}

第二种写法

	public static int halfSearch2(int[] arr,int key)
	{
		int min=0;
		int max=arr.length-1;
		int mid;
		while(min<=max)
		{
			mid=(min+max)>>1;
			if(arr[mid]<key)
			{
				min=mid+1;
			}else if(arr[mid]>key)
			{
				max=mid-1;
			}else
			{
				return mid;
			}
		}
		return -1;
	}

折半查找实例:在一个有些数组中插入一个数,并保证数组还是有序数组

 1     public static void main(String[] args)
 2     {
 3         int[] arr=new int[]{2,6,9,10,15,24,29,34,46};
 4         //通过折半查找要插入的元素在数组中的位置
 5         //如果存在这个元素的话就在这个元素所在数组位置插入
 6         //如果不存在这个元素的话就返回最小索引的值
 7         int key =11;
 8         int index=halfSearch(arr,11);
 9         
10         int[] arrTemp=new int[arr.length + 1];
11         for(int i=0;i<arr.length-1;i++)
12         {
13                 arrTemp[i]=arr[i];
14         }
15         for(int i=arrTemp.length-1;i>=index;i--)
16         {
17             if(index==i)
18                 arrTemp[i]=key;
19             else
20                 arrTemp[i]=arrTemp[i-1];
21         }
22         for(int i=0;i<arrTemp.length-1;i++)
23         {
24             System.out.println(arrTemp[i]);
25         }
26         
27     }
28     public static int halfSearch(int[] arr,int key)
29     {
30         int min=0;
31         int max=arr.length-1;
32         int mid;
33         while(min<=max)
34         {
35             mid=(min+max)>>1;
36             if(arr[mid]<key)
37             {
38                 min=mid+1;
39             }else if(arr[mid]>key)
40             {
41                 max=mid-1;
42             }else
43             {
44                 return mid;
45             }
46         }
47         return min;
48     }
View Code

 

posted @ 2019-12-12 16:56  一杯水M  阅读(395)  评论(0编辑  收藏  举报