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]);
}
}

 




posted @ 2021-03-25 13:48  金芒果决斗  阅读(110)  评论(0)    收藏  举报