JAVA学习之数组(排序,折半查找)
一、数组定义
同一种类型数据的集合,其实数组就是一个容器
数组定义格式:
1.数据类型[] 变量名 = new 数据类型[数组长度]
2.数据类型[] 数组名 = new 数据类型[]{元素,元素,.....};
二、数组遍历
同一种类型数据的集合,其实数组就是一个容器
数组定义格式:
1.数据类型[] 变量名 = new 数据类型[数组长度]
int[] arr = new int[5];
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 }