数组常见功能——查找

来源:互联网 发布:出租屋桌子推荐知乎 编辑:程序博客网 时间:2024/06/04 20:16

​                                                            数组常见功能——查找

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

        }

}


0 0
原创粉丝点击