遇到的一些简单算法
class Test {
public static int getMax (int [] arr)
{
int max = 0 ;
for (int x=1 ; x<arr.length; x++)
{
if (arr[x]>arr[max])
max = x;
}
return arr[max];
}
/**
获取一个整形数组中的最小值。
@param arr 接收一个int类型的数组。
@return 会返回一个该数组中最小值。
*/
public static int getMin (int [] arr)
{
int min = 0 ;
for (int x=1 ; x<arr.length; x++)
{
if (arr[x]<arr[min])
min = x;
}
return arr[min];
}
/**
给int数组进行选择排序。
@param arr 接收一个int类型的数组。
*/
public static void selectSort (int [] arr)
{
for (int x=0 ; x<arr.length-1 ; x++ )
{
for (int y=x+1 ; y<arr.length; y++)
{
if (arr[x]>arr[y])
{
swap(arr,x,y);
}
}
}
}
/**
给int数组进行冒泡排序。
@param arr 接收一个int类型的数组。
*/
public static void bubbleSort (int [] arr)
{
for (int x=0 ; x<arr.length-1 ; x++ )
{
for (int y=0 ; y<arr.length-x-1 ; y++)
{
if (arr[y]>arr[y+1 ])
{
swap(arr,y,y+1 );
}
}
}
}
/**
给数组中元素进行位置的置换。
@param arr 接收一个int类型的数组。
@param a 要置换的位置
@param b 要置换的位置
*/
private static void swap (int [] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
/**
用于打印数组中的元素。打印形式是:[elemet1, element2, ...]
*/
public static void printArray (int [] arr)
{
System.out.print("[" );
for (int x=0 ; x<arr.length; x++)
{
if (x!=arr.length-1 )
System.out.print(arr[x]+", " );
else
System.out.println(arr[x]+"]" );
}
}
public static int getIndex_2 (int [] arr,int key)
{
int min = 0 ,max = arr.length-1 ,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 min;
}
public static int halfSearch_2 (int [] arr,int key)
{
int min = 0 ,max = arr.length-1 ,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 ;
}
public static int halfSearch (int [] arr,int key)
{
int min,max,mid;
min = 0 ;
max = arr.length-1 ;
mid = (max+min)/2 ;
while (arr[mid]!=key)
{
if (key>arr[mid])
min = mid + 1 ;
else if (key<arr[mid])
max = mid - 1 ;
if (min>max)
return -1 ;
mid = (max+min)/2 ;
}
return mid;
}
}