Java-数组(冒泡排序,遍历打印,元素交换,查找元素是否在数组内,折半查找)

mac2022-06-30  27

* 数组其实就是一个容器,可以自动给数组中的元素编号0~n,方便操作元素  * 定义格式:元素类型[] 数组名 = new 元素类型[元素个数或数组长度]

数据明确的情况下:例,int[] arr = new int[]{1,2,3,4,9,7}

public class ArrayDemo {

    public static void main(String[] args) {         // TODO Auto-generated method stub         int[] x = new int[3];         int[] y = x;//x相当于把自己的地址赋给了y,所以x与y共享地址,对x操作的同时也是对y操作         //如果是new的,会重新开辟一个空间,一个新的地址,数组的地址即第一个元素的地址         y[1] = 99;         System.out.println(x[1]);         x = null;//x数组清空后,地址不再被x所用         System.out.println(y[1]);                  int[] arr = new int[]{1,8,3,4,9,7,2,5,6};         int[] arr1 = new int[]{1,3,5,7,9,11,13,15,17,19,21};         //排序前         System.out.print("排序前的数组:");         printArray(arr);         //排序(冒泡排序)         bubbleSort(arr);         System.out.println();         //排序后         System.out.print("排序后的数组:");         printArray(arr);         System.out.println();         //交换数组中某两个元素的位置         swap(arr,2,4);         System.out.print("交换位置后的数组:");         printArray(arr);         System.out.println();         //查找元素所在位置:查找成功返回相应索引号,查找失败返回-1         //1.遍历查找(不在乎是否排序)         int index = getIndex(arr,3);         System.out.println("元素3所在位置:"+index);         //2.折半查找(要求数组已排好序)         //方法1:         int index1 = halfSearch(arr1,5);         System.out.println("方法1:5所在的位置:"+index1);         //方法2:         int index2 = halfSearch_1(arr1,5);         System.out.println("方法2:5所在的位置:"+index2);                       }     //----------------------------------------------------         //冒泡排序:相邻的两个元素进行比较,符合条件就互换位置     public static void bubbleSort(int[] arr){         for(int n=0;n<arr.length-1;n++){             for(int m=0;m<arr.length-n-1;m++){//-n:让每一次比较的元素减少,-1:避免角标越界                 if(arr[m]>arr[m+1]){                     int temp = arr[m];                     arr[m] = arr[m+1];                     arr[m+1] = temp;                 }             }         }     }     //-------------------------------------------------------------     //遍历打印数组     public static void printArray(int[] arr){         System.out.print("(");         for(int i=0;i<arr.length;i++){//遍历数组             if(i!=arr.length-1){                 System.out.print(arr[i]+",");             }else {                 System.out.print(arr[i]+")");             }                      }     }     //----------------------------------------------------------------     //数组中两个元素交换位置     public static void swap(int[] arr,int a,int b){         int temp = arr[a];         arr[a] = arr[b];         arr[b] = temp;     }     //-----------------------------------------------------------------     //数组的查找,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组不存在     public static int getIndex(int[] arr,int key){         for(int l=0;l<arr.length;l++){             if(arr[l]==key)                 return l;         }         return -1;     }     //--------------------------------------------------------------------     //折半查找1:提高效率,前提是该数组是有序的数组     public static int halfSearch(int[] arr,int key){         int min,max,mid;         min = 0;         max = arr.length-1;         mid = (arr.length)/2;                  while(arr[mid]!=key){             if(key>arr[mid]){                 mid = mid+1;             }else if(key<arr[mid]){                 max = mid-1;             }             if(min>max){                 return -1;             }             mid = (max-min)/2;         }         return mid;     }     //-------------------------------------------------------------------     //折半查找2:提高效率,前提是该数组是有序的数组     public static int halfSearch_1(int[] arr,int key){         int min = 0;         int max = arr.length-1;         int 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;     }

}

 

最新回复(0)