数据结构之数组的运用,无非是增删查操作,就有序数组和无序数组进行这三种操作:
一、查找
(1)无序数组查找特定元素,线性查找:
1 public static void unSortSearchKey(int arr[], int key) { 2 for (int i = 0; i < arr.length; i++) { 3 if(arr[i]==key){ 4 System.out.println(key+"在无序数组中索引为的"+i+"个位置"); 5 } 6 else { 7 continue; 8 } 9 if(i==arr.length){ 10 System.out.println(key+"不存在与无序数组中"); 11 } 12 } 13 14 }
(2)有序数组查找特定元素,可以采用线性查找或者是二分查找(BinarySearch),这里我们使用二分查找 数组为升序排列或降序排列,使用二分查找代码代码有些不同,坑爹呀
1 public static int sortSearchKey(int[] arrSort, int key) { 2 3 int max,min,mid; 4 min = 0; 5 max = arrSort.length-1; 6 while(min<=max) 7 { 8 mid = (max+min)>>1; 9 if(key>arrSort[mid]) 10 max = mid - 1; 11 else if(key<arrSort[mid]) 12 min = mid + 1; 13 else 14 return mid; 15 } 16 return -min-1; 17 }
二、插入
(1)向有序数组中插入元素,并返回插入元素后的数组:
1 public static int[] insertKey(int[] arrSort, int key_insert) { 2 // int left=0; 3 // int right=arrSort.length-1; 4 // int half=(left+right)/2; 5 int position=sortSearchKey(arrSort, key_insert); 6 if(position>=0){ 7 arrSort=Arrays.copyOf(arrSort, arrSort.length+1); 8 for(int x=arrSort.length-1;x>position;x--){ 9 arrSort[x]=arrSort[x-1]; 10 } 11 arrSort[position]=key_insert; 12 // displayArr(arrSort); 13 } 14 else{ 15 arrSort=Arrays.copyOf(arrSort, arrSort.length+1); 16 for(int x=arrSort.length-1;x>=-(position+1);x--){ 17 arrSort[x]=arrSort[x-1]; 18 } 19 arrSort[-(position+1)]=key_insert; 20 // displaySortArr(arrSort); 21 } 22 return arrSort; 23 }
(2)无序数组中插入元素(数组扩容,插入到数组的最后即可)
1 public static void insertKey_2(int[] arr, int key_insert) { 2 Arrays.copyOf(arr, arr.length+1); 3 arr[arr.length-1]=key_insert; 4 displayArr(arr); 5 }
三、删除元素
1 public static void delete_1(int arr[],int delSortIndexKey) { 2 if(delSortIndexKey>=arr.length){ 3 return; 4 } 5 for(int i=delSortIndexKey;i<arr.length-1;i++){ 6 arr[i]=arr[i+1]; 7 } 8 arr[arr.length-1]=0; 9 displaySortArr(arr); 10 }