04天-03-数组(常见操作-获取最值)
两种常见的方法代码示例:
思路和步骤略。
方法1:
public static int getMax(int arr){
intmax = arr[0];
for(inti=1;i<arr.length;i++){
if(arr[i]>max){
max = arr[i];
}
}
return max;
}
方法2
public static void getMax(int[] arr){
intmax = 0;//数组最大值的初始化角标
for(intx=1;x<arr,length;x++){
if(arr[x]>arr[max]){
max = x;
}
}
return arr[max];
}
04-04-数组(排序-选择排序)
示例:
public static void selectSort(int[] arr){
for(intx=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;
}
}
}
}
04-05-数组(排序-冒泡排序)
示例:
public static void bubbleSort(int[] arr){
for(intx=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-x-1;y++){//让每一次比较的元素减少1,避免角标越界。
if(arr[y]>arr[y+1]){
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
当一个函数出现多个相同代码块或多个函数调用同一个代码块时,可以进行共性抽取。
上面的selectSort和bubbleSort可以抽取得到的函数如下所示:
public staticvoid swap(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
※ 最快的排序方法:希尔排序(效率最高)
04天-07-数组(折半查找)
折半查找特点:提高查询效率,但必须保证该数组是有序数组。
第一种方法:
public static int halfSearch1(int[] arr,intkey){
int min,max,mid;
min = 0;
max =arr.lenght-1;
mid =(max+min)/2;
while(arr[mid]!=key){
if(key>arr[mid]){
min = mid+1;
}else if(key<arr[mid]){
max = mid-1;
}
if(nin<max){
return -1;
}
mid = (max+min)/2;
}
return mid;
}
第二种方法:
public static int halfSearch2(int[] arr,intkey){
int min = 0,max= arr.length-1,mid;
while(min<max){
mid = (max+min)>>1;
if(key>arr[mid]){
min = mid+1;
}else if(key<arr[mid]){
max = mid-1;
}else{
return mid;
}
}
return -1;
}
04天-08-数组(十进制-二进制)
十进制-->二进制
public static String toBin(int num){
StringBuffer sb= new StringBuffer();
while(num>0){
sb.append(num%2);
num = num/2;
}
returnsb.reverse().toString();
}
04天-09-数组(十进制-十六进制)
十进制-->十六进制
第一种方法:
public static String toHex(int num){
StringBuffer sb= new StringBuffer();
for(intx=0;x<8;x++){//循环8次的原因:num为int,占32位,每次循环需截取低四位。
int temp = num%15;
if(temp>9){
sb.append((char)(temp-10+’A’));
}else{
sb.append(temp);
}
}
}
第二种方法:
//此函数只能转正整数
public static String toHex(int num){
char[] chs = {‘0','1','2','3',
'4','5','6','7',
'8','9','A','B','
C','D','E','F’};
//定义一个临时容器
char[] arr = newchar[8];
int pos =arr.length;
while(num!=0){
int temp = num&15;
arr[--pos] = chs[temp];
num = num>>>4;
}
return “0x”+String.valueOf(arr).substring(pos);
}
04天-11-数组(查表法十进制-二进制)
/*
此函数能转负数
*/
public static String toBin(int num){
//定义二进制表
char[] chs = {‘0’,’1’};
//定义一个临时存储器
char[] arr = newchar[32];
int pos =arr.length;
while(num!=0){
int temp = num&1;
arr[--pas] = chs[temp];
num = num>>>1;
}
returnString.valueOf(arr).subString(pos);
}
04天-12-数组(进制转换优化)
进行共性抽取,一个函数可以实现多进制转换。
public static String trans(int num,intbase,int offset){
if(num==0){
return “0”;
}
char[] chs = {‘0','1','2','3',
'4','5','6','7',
' 8','9','A','B','
C','D','E','F’};}
char[] arr = newchar[32];
int pos =arr.length;
while(num!=0){
int temp = num&base;
arr[--pos] = chs[temp];
num = num>>>offset;
}
returnString.valueOf(arr).substring(pos);
}
/*十进制-->八进制*/
public static String toBa(int num){
returntrans(num,7,3);
}
/*十进制-->十六进制*/
public static String toHex(int num){
returntrans(num,15,4);
}
/*十进制-->二进制*/
public static String toBin(int num){
renturntrans(num,1,1);
}
04-14-数组(二维数组练习)
1. 二维数组的格式
格式1:int[][] arr =new int[3][2];
解析:
a. 定义了名称为arr的二维数组;
b. 二维数组中有三个一维数组;
c. 每个一维数组中有2个元素;
d. 一维数组的名称分别为arr[0]、arr[1]、arr[2];
e. 给第一个一维数组1角标位赋值为78的写法是:arr[1][1] = 78。
格式2:int[][] arr =new int[][];
解析:
a. 二维数组中有三个一维数组;
b. 每个一维数组都是默认初始化值null;
c. 可以对这三个一维数组分别进行初始化:
arr[0] = newint[3];
arr[1] = newint[1];
arr[2] = new int[2];
2. 举例
1) int [][] arr = new int[3][4];/*定义了名称为arr的二维数组,二维数组中有三个一维数 组,每个一维数组有四个元素。*/
System.out.println(arr);//结果:[[I@17164(二维数组地址)
System.out.println(arr[0]);//结果:[I@de6ced(一维数组的入口地址)
2) int[][] arr = new int[3][]
System.out.println(arr);//结果:[[@17164
System.out.println(arr[0])//结果:null
3. 数组的其他正确书写格式
1) int[] x;int x[];
2) int[][] y;int y[][];int []y[];
3) int[]x,y[];//x一维,y二维也可拆分为:
int[] x;
int[] y[];
以上这种格式在开发中不用,sun国际认证考试中会出现。
x[0] = y;//error
y[0] = x;//yes
y[0][0] =x;//error
y[0][0] =y;//error
y[0][0] = x[0];//yes
x = y;//error