c、排序——换位置功能的提取 引言:发现无论是什么排序,都需要对满足条件的元素进行位置的置换,所以可以把这部分相同的代码提取出来,单独封装成为一个函数! public static void swap(int[] arr,int a,int b) { inttemp=arr[a]; arr[a]=arr; arr=temp; } 在上面b中的程序中,可以直接运行swap(arr); D、数组——查找 定义功能,获取key第一次出现在数组中的位置,如果返回是 -1,那么代表该key值在数组中不存在 实例: class Index { publicstatic void main(String[] args) { int[]arr={3,1,5,4,2,9}; intindex=getIndex(arr,2); System.out.println("index="+index); } publicstatic int getIndex(int[]arr,int key) { for(int x=0;x<arr.length;x++) { if(arr[x]==key) { returnx; } } return-1; } } 所以,如果在上面的程序的arr数组中出现了两个2,那么index输出的将是第一次2出现的角标值 折半查找 可以提高效率,但是必须要保证该数组是有序的数组。 classHalfSearch { public static int halfSearch(int[] arr,intkey) { int min,mid,max; min=0; max=arr.length-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 (min>max) return -1; mid=(max+min)/2; } return mid; } public static void main(String[] args) { int[] arr={2,4,5,7,19,32,45}; int index=halfSearch(arr,55); System.out.println("index="+index); } } 折半的第二种方式: classHalfSearch2 { public static int halfSearch_2(int[]arr,intkey) { int min =0,max=arr.length-1,mid; while (min<=max) { mid=(min+max)>>1;//等价于mid=(max+min)/2 if (key>arr[mid]) min=mid+1; else if (key<arr[mid]) max=mid-1; else return mid; } return -1; } public static void main(String[] args) { int[] arr={2,4,5,7,19,32,45}; int index=halfSearch_2(arr,55); System.out.println("index="+index); } } 练习题1:有一个有序的数组,想要将一个元素插入到该数组中,还要保证数组是有序的,如何获取该元素在数组中的位置 {2,4,5,7,19,32,45} classHalfPractice { publicstatic int halfSearch_2(int[]arr,int key) { int min =0,max=arr.length-1,mid; 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 min; } public static void main(String[] args) { int[] arr={2,4,5,7,19,32,45}; int index=halfSearch_2(arr,8); System.out.println("index="+index); } } 就是在最后返回时将halfSearch2中的return-1改成了return min,此时的min就是8应该所在的位置! 练习题2:十进制转二进制 classArrayTests { public static void tobin(int num) { while (num>0) { System.out.print(num%2); num=num/2; } } public static void main(String[] args) { tobin(6); } } 最后的输出结果是011,将显示的结果反过来就是110就是6的2进制数! 练习题3:十进制转十六进制 class ArrayTest16 { public static void toHex(int num) { for (int x=0;x<8 ;x++ ) { int temp=num&15; if (temp>9) System.out.println((char)(temp-10+'A')); else System.out.println(temp); num= num>>> 4; } } public static void main(String[] args) { toHex(60); } }
|