数组常见功能——查找
class DemoCtil7{
public static void main(String[] args){
int[] arr={4,1,5,7,3,8,2};
int index=getIndex(arr,8);
System.out.println("index="+index);
}
}
//数组常见功能:查找
public static int getIndex(int[] arr,int key){
for(int x=0;x<arr.length;x++){
if(arr[x]==key)
return x;
}
return -1;
}
数组常见操作——折半查找
class DemoCtil8{
public static void main(String[] arr){
int[] arr={13,15,19,28,33,45,78,106};
int index=halfSearch(arr,28);
System.out.println("index="+index);
}
public static int halfSearch(int[] arr,int key){
int max,min,mid;
min=0;
max=arr.length-1;
min=(min+max)/2;
whilc(arr[mid]!=key){
if(key<arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
if(max<min)
return -1;
}
return mid;
}
}第一种:
class DemoCtil_8{
public static void main(String[] arr){
int[] arr={13,15,19,28,33,45,78,106};
int index=halfSearch(arr,28);
System.out.println("index="+index);
}
public static int halfSearch_2(int[] arr,int key){
int max,min,mid
min=0;
max=arr.length-1;
while(min<=max){
mid=(min+max)>>1;
if(ket>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1
else
return mid;
}
return -1;
}
}注:第二种。 建议应这种
折半查找练习
给定一个有序的数组,如果往该数组中存储一个元素,并保证这个
数组还是有序的,那么这个元素的存储角标该如何获取。
{13,15,19,28,33,45,78,106}
class DemoCtil8{
public static void main(String[] args){
int[] arr={13,15,19,28,33,45,78,106};
int index=halfSearch_2(arr,50);
System.out.println("index="+index);
//如果存在返回的具体的角标位置,不存在返回的是 —插入点-1
}
public static int halfSearch_2(int[] arr,int key){
int max,min,mid;
min=0;
max=arr.leng-1;
while(min<=max){
mid=(min+max)>>1;
if(key<arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return mid;
}
}
进制转换
获取一个整数的16进制表现形式
class DemoCtil9{
public static void main(String[] args){
toHex(60);
}
public static void toHex(int num){
for{int x=0;x<8;x++}{
int temp=num&15;
if(temp>9)
System.out.print((char)(temp-10+'A'));
else
System.out.print(temp);
num=num>>>4;
}
}
}
进制转换——2 查表法
class DemoCtil_1{
public static void main(String[] args){
toHex_1(60);
}
//0,1,2,3,4,5,6,7,8,9, A , B , C , D , E ,F ,
//0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
/*什么时候使用数组呢?
如果数据出现了对应关系,而且对应关系的一方是有序的数组编号。
并作为角标使用,这时就必须想到数组的使用。
就可以将这些数据储存到数组中。
根据运算的结果作为角标,直接去查数组中对应的元素即可。
这种方法:称为查表法。
*/
public static void toHex_1(int num)
{ //定义一个对应关系表。
char[] chs={'0','1','2','3','4','5','6','7','8','9',' A' ,' B' ,' C' ,' D' ,' E' ,'F ',};
for(int x= 0;x<8;x++){
int temp=num&15;
System.out.print(chs[temp]);
num=num>>>4;
}
}
}
进制转换——2
class DemoCtil_2{
public static void main(String[] args){
toHex_2(60);
}
public static void toHex_2(int num){
if(num==0) {
System.out.println("0");
return;
}
{ //定义一个对应关系表。
char[] chs={'0','1','2','3','4','5','6','7','8','9',' A' ,' B' ,' C' ,' D' ,' E' ,'F ',};
/*一会查表会查到比较的数据,数据一多,就先储存起来,进行操作。
所以定义一个数组。临时容器。*/
char[] arr=new char[8];
int pos=arr.length;
while(num!=60){
int temp=num&15;
arr[--pos]=chs[temp];
num=num>>>4;
}
System.out.println("pos="+pos);
for(int x=pos;x<arr.length;x++){
System.out.print(arr[x]);
}
}
}
}
进制转换整合
class DemoCtil_3{
public static void main(String[] args){
toHex(26);
toBinary(-6);
toOctal(26);
}
public static void toHex(int num){
trans(num,15,4);//十进制转十六进制
}
public static void toBinary(int num){
trans(num,1,1);//十进制转二进制
}
public static void toOctal(int num){
teans(num,7,3);//十进制转八进制
}
public static void trans(int num,int base,int offset){
if(num==0){
System.out.println("0");
return:
}
char[] chs={'0','1','2','3','4','5','6','7','8','9',' A' ,' B' ,' C' ,' D' ,' E' ,'F ',};
char[] arr=new char[32];
int pos=arr.length;
while(num!=0){
int temp=num&base;
arr[pos]=chs[temp];
num=num>>>offset;
}
for(int x=pos;x<arr.length;x++){
System.out.print(arr[x]);
}
System.out.println();
}
}
查找表练习
class DemoCtil_5{
public static void main(String[] args){
String week=getweek(7);
System.out.println(week);
}
/*
使用查表法:
星期。
String s="abc";
int x=4;
*/
public static String getweek(int num){
if(num>7 || num<1){
return "错误的星期";
}
String[] wekks={"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
return weeks[num];
}
}