JAVA学习(折半查找,进制转换)
一、折半查找
要求:该序列必须是有序的,且必须是顺序存储的。
原理:首先计算表中间的位置,将表中间位置处的关键字与查找的关键字进行比较,如果相等,则查找成功;否则利用中间位置将表分为前、后两个子表,如果中间位置的关键字大于查找的关键字,则查找前子表,否则查找后子表。重复上面的过程,直到找到要查找的关键字为止,否则查找失败不存在此关键字。
实现代码:
public static int halffSearch(int []arr,int key){
int min=0;
int max=arr.length-1;
int mid = (min+max)/2;
while(arr[mid]!=key) {
if (key > arr[mid]) {
min = mid + 1;
} else if (key < arr[mid]) {
max = mid - 1;
}
if (max<min){
return -1;
}
mid = (min+max)/2;
}
return mid;
}
二、进制转换
使用与运算进行进制转换
例如:10进制数(60)转16进制:
10进制数(60)转换为2进制为:0011-1100
1.此时将0011-1100和0000-1111进行与运算
0011-1100 (60)
& 0000-1111 (15)
--------------------
0000-1100 (12 即为C)
0011-1100的后四位将得到保留,我们就得到了原数转换为16进制的个位;
2.将原数0011-1100右移四位再和0000-1111进行与运算
0011-1100
&0000-1111
-------------------------
0011 (3)
得到原数转换为16进制的十分位;
3.同理10进制转2进制,和1进行与运算,原数右移1位。
10进制转8进制,和7进行与运算,原数右移3位。
实现代码:
public static void toHex(int num){
trans(num,15,4); //10转16,与15,右移4位
}
public static void trans(int num,int base,int offset){
char [] hex = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char [] arr = new char[8];
int index=arr.length-1;
while(num!=0) {
int hnum = num & base;
arr[index--]=hex[hnum];
num = num >>> offset;
}
for (int i=index;i<arr.length;i++){
System.out.print(arr[i]);
}
}

浙公网安备 33010602011771号