您的位置:首页 > 职场人生

黑马程序员<java基础<选择,冒泡,折半,进制转换知识点>>

2015-06-09 22:13 573 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

【排序中效率最高的是希尔排序】

java自带排序代码

import java.util.*;

{Arrays.sort(arr);}

冒泡 排序  

public static void bubbleSort(int[]arr)

{

   for(int x=0;x<arr.length-1;x++)  //for(int x=arr.length-1;x>0;x--)

    {                                            //for(int y-0;y<x;y++)

     for(int y=0;y<arr.length-x-1;y++)//-x:让每一次比较的元素减少,-1:避免角标越界。

     {

   if(arr[y]>arr[y+1]) 

          {    int temp=arr[y];

               arr[y]=arr[y+1];

               arr[y+1]=temp;     int []arr{1,2,8,4};

                        }

                               }

                                     }

                                             }

选择排序

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

           {  

               int temp=arr[x];

               arr[x]=arr[y];

              arr[y]=temp;

                                 }

                         }                                    

                 }                            

  }

发现无论什么排序。都需要对满足条件的元素进行位置置换。

所以可以把这部分相同的代码提取出来,单独封装成一个函数。

public static void swap{int[]arr,int a,int b}



 int temp=arr[a];

 arr[a]=arr[b];

 arr[b]=temp;

}

完整排序编码

class Demo12

{     

      public static void main(String[ ]args)

      {     int []arr={5,2,4,1,6,7,9,8};

selectSort(arr);

            paixu(arr);

            selectSort(arr);           

}

public static void paixu(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])

{

   int a =arr[y];

   arr[y]=arr[y+1];

   arr[y+1]=a;

}}}}

public static void  selectSort(int[]arr)   



   for(int x=0;x<arr.length;x++)

   {

 System.out.print("["); 

             

          if(x!=arr.length-1)

            System.out.print(arr[x]+"];"); 

           else

 System.out.println(arr[x]+"] "); 

                                

                    }

                         }                                    

        

         }

折半查找:提高效率,但是必须要保证该数组是有序的数组

class Demo12

{     

      public static void main(String[ ]args)

      {     int []arr={1,2,5,6,7,9,8};
int x=getcha(arr,7);

            System.out.println("x="+x);           

}

public static int   getcha(int[]arr,int key)

  {    int min,max,mid;

     min=0;

     max=arr.length-1;

    mid=(min+max)/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=(min+max)/2;

}

return mid;

}

}

折半查找第二种方法

public static  int getzhao_2(int[]arr,int key)

{int min=0,max=arr.length-1,mid;

  while(min<=max)

{     mid=(min+max)/2;

      if(key>arr[mid]) 

  min=mid+1;

else if(key>arr[mid]) 

  max=mid-1;

else

return mid;

            }

return -1;}

十进制转二进制

public static void toBin=(int num)

{ StringBuffer sb=new StringBuffer();

   while(num>0)

{  sb.append(num%2);   //append 添加 算一个数存一个数

   num=num/2;

}

System.out.println(sb.reverse());}}   //sb.reverse()将sb存储中的值反转

十进制转十六进制

class Demo12

{

 public static void main(String[]args)

{     getliu(60);}

   public static void getliu(int num)

{  StringBuffer sb=new StringBuffer();

  for(int x=0;x<8;x++)

{  int temp=num&15;

  if(temp>9)

 sb.append((char)(temp-10+'A'));

   else 

sb.append(temp);

 num=num>>>4;}

System.out.println(sb.reverse());

}

}

查表法十进制 十六进制

class ArrayTest6

{

public static void main(String[]args)

{   toHex(-60);

}

public static void toHex(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!=0)

{

  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 Demo13

{

public static void main(String[]args)

{   

toHex(60);

}

 十进制转二进制     

public static void toBin(int num)

{

trans(num,1,1);

}

 十进制转八进制

public static void toBa(int num)

{

trans(num,7,3);

}

 十进制转十六进制

public static void toHex(int num)

{

trans(num,15,4);

}

public static void trans(int num,int base,int offset)

{

   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(arr.length);//打印是二维数组的长度

System.out.println(arr[0].length);//打印二维数组中第一个一维数组长度

求三个数组加起来的总和

class Demo13

{

  public static void main(String[]args)

{int[][]arr={{1,2,3,4},{2,2,3,4},{3,4,5,6}};

int sum=0;

for(int x=0;x<arr.length;x++)

{

  for(int y=0;y<arr[x].length;y++)

{  sum=sum+arr[x][y];}}

System.out.print("sum="+sum);

}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: