public class TestArray{public static void main(String args[]){int y=new Integer("3"); //这里如果 用 int[] y = new Integer(args.length); ,会提示不兼容的类型,原因是将integer 构造方法的值直接赋值给数组, 而Integer没有返回类型为数组的 构造方法,所以需要格外注意,追根到底还是定义数组的格式问题int a[]=new int[args.length];for(int i=0;i<args.length;i++){a[i]=Integer.parseInt(args[i]);}print(a);System.out.println(y);selectSort(a);print(a);}static void print(int[] a){for(int i=0;i<a.length;i++){System.out.print(a[i]+" ");}System.out.println();}static void selectSort(int[] a){for(int i=0;i<a.length;i++){for(int j=i+1;j<a.length;j++){if(a[j]<a[i]){int z=a[j];a[j]=a[i];a[i]=z;}}}}}
以上版本还存在优化的空间,以下是优化过得程序//优化版本public class TestArrayOptimize{public static void main(String args[]){int y=new Integer("3");int a[]=new int[args.length];for(int i=0;i<args.length;i++){a[i]=Integer.parseInt(args[i]);}print(a);System.out.println(y);selectSort(a);print(a);}static void print(int[] a){for(int i=0;i<a.length;i++){System.out.print(a[i]+" ");}System.out.println();}private static void selectSort(int[] a){ //这里可以将这个方法限定为内部访问int k,temp; //1for(int i=0;i<a.length;i++){k=i;for(int j=k+1;j<a.length;j++){ / /2if(a[j]<a[k]){k=j;}}if(a[i]!=a[k]){ //这里还需要有点注意的地方,就是比较 i与k的值比较,还是比较其下标的数组值,都可以,即 可以写成 if(i!=k)这样比较也可以,而且更好temp=a[k];a[k]=a[i];a[i]=temp;}}}以上这个版本主要做了两点优化
1、只在栈内存分配一次变量2、排序时,从找到的更小的数往后继续比较大小,直到找到最小的数,然后与前面的数对调位置,完成内部循环,依次类推完成外部寻循环,直到完成比较。
二、折半查找法
public class BinarySearch{
public static void main(String[] args){
//int[] arr=new int[1,2,3,4,5,8,12,14,15,17,20,24];int[] arr={1,2,3,4,5,8,12,14,15,17,20,24};System.out.println(searchNum(arr,12));System.out.println(binarySearch(arr,24)); //输出结果为 -1 —————— ①System.out.println(binarySearch(arr,1)); //输出结果为0
}//static void searchNum(int[] a,int num){public static int searchNum(int[] a,int num){for(int i=0;i<a.length;i++){if(a[i]==num){return i;}}return -1;}public static int binarySearch(int[] a,int num){if(a.length==0) return -1;int startPos=0;int endPos=a.length-1;//一开始这里忘记减去1,结果返回值为就返回-1。int index=(endPos+startPos)/2;// for(int i=startPos;i<endPos;i++){// if(a[i]==num){// return i;// }// if(a[i]>num){// startPos=index+1;// }// if(a[i]<num){// endPos=index-1;// }// } ———————————— ①while(startPos<endPos){ //这里如果少了一个=号 ,—————— ②if(a[index]==num){return index;}if(a[index]<num){startPos=index+1;}if(a[index]>num){endPos=index-1;}index=(startPos+endPos)/2;———————————————③}return -1;}
}
总结:
①一开始使用for循环想完成这个实例,但是失败了,需要思考原因,进一步查找资料
②使用while循环控制时,起始位置与结束位置应该可以相等,不然如果查找的数是最后一个数,会查找不到,返回-1;
③使用while循环时,需要记得加上这条语句,不然就会陷入死循环,无限循环下去