黑马程序员技术交流社区
标题:
头疼整理--数组的操作方法,封装成工具类
[打印本页]
作者:
libin
时间:
2015-7-26 17:01
标题:
头疼整理--数组的操作方法,封装成工具类
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;
}
}
复制代码
作者:
libin
时间:
2015-7-26 17:02
不知代码是否有错,或者有更简体的代码,请各位指正。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2