1 进制转换

我们生活中经常是用到的进制是十进制,而其他进制:二进制、八进制、十六进制在计算机和其他领域(中药称重:十六进制)用的较为广泛;

 进制间的转换,常用的方法是采用除法取余的方法来计算进制间转换后的数值,也可以使用移位或者&操作完成该功能;

也可以调用系统中的进制转换函数来实现该功能:

String str1 = Integer.toBinaryString(12);//将12转为二进制 ,返回值是 String型
String str2 =Integer.toHexString(12);//将12转为十六进制
String str3 =Integer.toOctalString(12);//将12转为八进制数

在学习中总结的十进制转换成其他进制(二进制、八进制、十六进制)的算法如下:

public static void trans(int num,int base,int offset)    //num: 需要转换的数据   base:基数,与之相与后的值便是转换后的进制数值, offset相与后右移的位数

2 排序算法

{
if (num == 0) //如果是0 直接打印0
{
System.out.println(0);
return;
}
char [] ch = {'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;//(相当于取余操作),功能: 取出低位
                      // 如果转为2进制则与1相与,算出最低位后,右移一位算出次低位,依次算下去
arr[--pos] = ch[temp];//将其存入字符数组中
num = num >>> offset; //右移offset位  如果是一位,相当于模2;三位, 相当于模 7 运算 ;四位,相当于模15
}
for(int x = pos; x<arr.length; x++)
{
System.out.print(arr[x]);//倒序打印,从高位开始打印
}

}
public static void toBin( int num)//十进制转为二进制
{
trans(num,1,1);
}
public static void toOct( int num)//十进制转为八进制
{
trans(num,7,3);
}
public static void toHex( int num)//十进制转为十六进制
{
trans(num,15,4);
}

常用的排序算法有:冒泡排序、选择排序、快速排序和希尔排序等。

下面介绍最常用的的冒泡排序:

冒泡排序算法,就如同该算法的名字一般,

每完成一次内部的for循环,就能将未排序的数据中的最大值(最小值)找出来,

下一次只需要排剩下的n-i个数,直到全部结束,便完成该排序功能。

而且外层循环的次数与数据总数有关,内层循环与需要重新排序的数据的个数有关。

public static void sort(int []arr)
{
 int i,j, t;
    for(j=0;j<arr.length;j++)   //循环arr.length-1次
    {
         for(i=0;i<arr.length-j-1;i++)    //内循环 
         {
              if(arr[i]>arr[i+1]) //从第一个数与其余所有数相比较, 将最最大值放最后 ;
              {                            //第二次从第一个数和剩余的 arr.length-2个数相比较,得到次大数,直到结束,排序完成               
                   t=arr[i];//借助变量进行值交换
                   arr[i]=arr[i+1];
                   arr[i+1]=t;
              }            
         }
    } 
    for(j=0;j<arr.length;j++)
    {
    System.out.print(arr[j]);
    }

}

选择排序:

public static void sort1(int []arr) 

{ 

int min,temp; 

for(int i=0;i<arr.length;i++)//循环arr.length-1次 

{                    

             for(int j=i+1;j<arr.length;j++) 

             { 

             
if(arr[i]>arr[j])   //相邻两个进行交换 将最小值往前移         
 

             
{ 

             
temp=arr[j]; 

             
arr[j]=arr[i]; 

             
arr[i]=temp; 

             
}                  

             }    

            } 

for(int j=0;j<arr.length;j++)打印排序后的数据 

    { 

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

    } 

}

查找算法:

  a 最基本的方法:获取需要查找的数据,然后遍历数组进行比较,返回第一次该数据在数组中出现的位置

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

{ 

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

{ 

if (arr[x] == key)//相等 说明该数存在数组中 

{ 

System.out.println("该数据存在数组中,并且首次出现的位置是"+(x+1)); 

return (x+1); 

} 

} 

System.out.println("该数据不在数组中");//否则不存在 

return -1; 

}

b 二分法查找

二分法查询思想的前提:数据是有序的(升序或降序),
如升序:2,3,5,7,30(降序:10,8,6,4,1)。
然后将需要查找的数据和数组中长度一半的位置开始比较:
如果相等,则找到目标数据;
如果目标数据小于array[middle],则在数组的前一半中继续查找,这时最大角标为 max=middle-1;
否则就只数组的后一半中继续查找,这时最小的角标为min =middle+1;
这样进行下去直到找到目标数据,如果查找不到,说明数据不存在;
这种算法进行一次查找就能省去一半的数据比较,查找效率较高;

public static int Search(int[] array,int value)
     {
             int min = 0;
             int max = array.length-1;
             int middle;
             
             while(min <= max)
             {
                     middle = (max+min)/2;  //将需要查找的数据和数组中长度一半的位置开始比较:                            
                     if(value < array[middle])//如果目标数据小于array[middle],则在数组的前一半中继续查找
                                                // 这时最大角标为 max=middle-1
                     { 
                     max=middle-1;                           
                     }
                     
                     if(value > array[middle])//否则就只数组的后一半中继续查找,这时最小的角标为min =middle+1
                     {
                     min =middle+1;
                     }
                                               
                     if(array[middle] == value)//如果相等,则找到目标数据
                     {
                     return middle;
                     }
             }
             System.out.println("该数据不在数组中");
             return -1;
             
     }