java (三)【数组】遍历、排序、折半查找
数组
数组的定义:同一种类型数据的集合,其实数组就是一个容器。
数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素
格式一:
元素类型[]数组名 = new 元素类型[元素个数或数组长度]
int [] arr=new int [5];
格式二:
元素类型[]数组名=new 元素类型[]{元素,元素...};
int [] arr =new int [] {3,5,1,7};
int [] arr ={3,5,1,7};
1 //用于打印数组中的元素,元素间用逗号隔开 2 public class hello { 3 4 public static void main(String[] args) { 5 int [] arr= {1,2,3,4,54}; 6 qwe(arr); 7 } 8 public static void qwe(int [] arr) 9 { 10 for (int i =0;i<arr.length;i++) //数组中有一个可以直接获取数组元素个数,length,使用方法:数组名.length= 11 { 12 if(i!=arr.length-1) 13 System.out.print(arr[i]+","); 14 else 15 System.out.println(arr[i]); 16 } 17 } 18 }
内存结构
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放
堆内存
- 数组和对象,通过new建立的实例都存放在堆内存中
- 每一个实体都有内存地址值
- 实体中的变量都有默认初始化值
- 实体不在被使用,会在不确定的时间内被垃圾回收器回收
选择排序
1 //获取数组元素中的最大值 2 public class hello { 3 4 public static void main(String[] args) { 5 int [] arr= {1,2,3,4,54}; 6 int x =qwe(arr); 7 System.out.println(x); 8 } 9 public static int qwe(int [] arr) 10 { 11 int max =arr[0]; 12 for(int i=1; i<arr.length;i++) 13 { 14 if (arr[i]>max) 15 max=arr[i]; 16 } 17 return max; 18 } 19 }
冒泡排序
定义:相邻的两个元素进行比较,如果符合条件换位
1 public class asd { 2 3 public static void main(String[] args) { 4 int[] arr = { 1, 2, 3, 4, 54 }; 5 System.out.print("排序前"); 6 for (int i = 0; i < arr.length; i++) { 7 System.out.print(arr[i]+","); 8 } 9 qwe(arr); 10 System.out.println(); 11 System.out.print("排序后"); 12 for (int i = 0; i < arr.length; i++) { 13 System.out.print(arr[i]+","); 14 } 15 } 16 17 public static void qwe(int[] arr) { 18 for (int x = 0; x < arr.length - 1; x++) { 19 for (int y = 0; y < arr.length - x - 1; y++) { 20 if (arr[y] < arr[y + 1]) { 21 int temp = arr[y]; 22 arr[y] = arr[y + 1]; 23 arr[y + 1] = temp; 24 } 25 } 26 } 27 } 28 }
折半查找
定义:必须要保证该数组是有序的数组
1 public class asd { 2 public static void main(String[] args) { 3 // int [] arr ={3,4,5,6,2,3,4}; 4 // int index=qwe(arr,4); 5 // System.out.println("index="+index); 6 int []arr ={1,3,4,5,7,8,12,33,455,666,777}; 7 int index=zxc_1(arr,3); 8 System.out.println("index="+index); 9 } 10 //折半查找第一种方法 11 public static int zxc(int []arr,int key) 12 { 13 int min,max,mid; 14 min=0; 15 max=arr.length-1; 16 mid=(min+max)/2; 17 while (arr[mid]!=key) 18 { 19 if(key >arr[mid]) 20 min=mid+1; 21 else if (key<arr[mid]) 22 max=mid-1; 23 if(min>max) 24 return -1; 25 mid =(max+min)/2; 26 } 27 return mid; 28 } 29 //折半查找第二种方法 30 public static int zxc_1(int[] arr,int key) 31 { 32 int min,max,mid; 33 min=0; 34 max=arr.length-1; 35 while (min<=max) 36 { 37 mid =(max+min)/2; 38 if(key>arr[mid]) 39 min=mid +1; 40 else if (key<arr[mid]) 41 max=mid-1; 42 else 43 return mid; 44 } 45 return -1; 46 } 47 //定义功能,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组中不存在 48 public static int qwe(int []arr,int key) 49 { 50 for (int x=0;x<arr.length;x++) 51 { 52 if(arr[x]==key) 53 return x; 54 } 55 return -1; 56 } 57 }
练习:有一个有序数组,想要将一个元素插入到该数组中
public class asd { public static void main(String[] args) { int []arr ={1,3,4,5,7,8,12,33,455,666,777}; int index=zxc_1(arr,3); System.out.println("index="+index); } public static int zxc_1(int[] arr,int key) { int min,max,mid; min=0; max=arr.length-1; while (min<=max) { mid =(max+min)/2; if(key>arr[mid]) min=mid +1; else if (key<arr[mid]) max=mid-1; else return mid; } return min; } }


浙公网安备 33010602011771号