- class ArrayTools
- {
- //遍历打印数组中所有元素
- public static void arrayPrint(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.println(arr[i]+"]");
- }
- }
- //数组两元素值进行交换
- private static void exchange(int[] arr,int a,int b)
- {
- int temp;
- temp=arr[a];
- arr[a]=arr[b];
- arr[b]=temp;
- }
- //获取数组的最大值
- public static int getMax(int[] arr)
- {
- int max=0;
- for(int i=1;i<arr.length;i++)
- {
- if(arr[max]<arr[i])
- exchange(arr,max,i);
- }
- return arr[max];
- }
- //获取数组的最小值
- public static int getMin(int[] arr)
- {
- int min=0;
- for(int i=1;i<arr.length;i++)
- {
- if(arr[min]>arr[i])
- exchange(arr,min,i);
- }
- return arr[min];
- }
- //选择排序法,简单来说就是先找出最小值(或最大值),
- //放在角标为0(或最大角标)的元素下,再找出第二小(或大)的值放在角标为1的元素下,
- //以此类推,直到找出最大值
- public static void sort_1(int[] arr)
- {
- for(int i=0;i<arr.length-1;i++)
- {
- for(int j=i+1;j<arr.length;j++)
- {
- if(arr[i]>arr[j])
- exchange(arr,i,j);
- }
- }
- }
- //冒泡排序,已知一个数组,如果升序排列,比较相邻两个元素,如果角标小的元素值大,则两者交换,
- //这样就把最大值放在最末尾,然后再重复上一过程,直到所有元素都排列好。
- public static void sort_2(int[] arr)
- {
- 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])
- exchange(arr,j,j+1);
- }
- }
- }
-
- //折半查找,第一种方法,必须保证数组是有序的
- public static int halfSearch_1(int[] arr,int key)
- {
- int min,max,mid;
- min=0;
- max=arr.length-1;
- mid=(min+max)/2;
- while(arr[mid]!=key)
- {
- if(key>arr[mid])
- min=mid+1;
- else if(key<arr[mid])
- max=mid-1;
- mid=(max+min)/2;
- if(min>max)
- return -1;
- }
- return mid;
- }
- //折半查找第二种方法,必须保证数组时有序的。
- public static int halfSearch_2(int[] arr,int key)
- {
- int min,max,mid;
- min=0;
- max=arr.length-1;
- while(min<=max)
- {
- mid=(min+max)/2;
- if(key>arr[mid])
- min=mid+1;
- else if(key<arr[mid])
- max=mid-1;
- else
- return mid;
- }
- return -1;
- }
- //在一个有序数组中利用折半查找法,插入元素
- public static int[] insert(int[] arr,int el)
- {
-
- int index=halfSearch_1(arr,el);
- if(index!=-1)
- return insert(arr,index,el);
- else
- {
- int min,max,mid;
- min=0;
- max=arr.length-1;
-
- while(min<=max)
- {
- mid=(min+max)/2;
- if(el>arr[mid])
- min=mid+1;
- else if(el<arr[mid])
- max=mid-1;
- }
- return insert(arr,min,el);
- }
- }
- //在一个数组中的指定位置插入一个元素,
- private static int[] insert(int[] arr,int index,int el)
- {
- int[] arr2=new int[arr.length+1];
- for(int i=0;i<arr2.length;i++)
- {
- if(i<index)
- arr2[i]=arr[i];
- else if(i==index)
- arr2[i]=el;
- else
- arr2[i]=arr[i-1];
- }
- return arr2;
- }
- }
复制代码
|
|