P.S.
1、上面的selectSort方法之所以不用返回int数组的原因是因为:arr引用变量是对传入selectSort方法中作为参数的数组的引用,selectSort方法执行完毕之后,我们依然可以通过arr引用变量操作传入的数组。所以,没有必要再通过返回值获取。
2、上面的选择排序算法效率比较低,因为数组每一个元素与剩下的元素比较就是为了获得最小的元素并且与之互换。例如:{89,34,-270,17,3,100}这个数组,第一轮就要互换4次才能使第一个元素存储的是这个数组中最小的元素。如果是这样,那么更高效率的方式则是只需要通过两个变量,一个记录最小值,一个记录最小值所在的角标即可。等当前元素与余下的所有元素比较完,直接互换,这样只需互换一次就能达到目标,效率自然就会提高。
说明:由上面的结果可以看到,如果要向数组{13,15,19,28,33,45,78,106}中插入值为44的元素,那么应该插入的位置角标是5,角标为5以及其后的元素都应该往后顺延一个位置。
P.S.
在实际开发中,二分查找也不需要我们自己去写,JDK中已经提供了相关的API供调用。
示例:
说明:返回的是-6而不是5的原因可以通过API文档查找到.
练习:获取一个十进制整数的2、8、16进制表现形式。
注意:
1、什么时候使用数组呢?
2、如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为角标使用,这时候必须要想到数组的应用。
3、将这些数据存储到数组中,根据运算的结果作为角标直接去查数组中对应的元素即可,这种方式称为查表法。
思路:
1、首先判断如果传入的十进制数为0,那么它的2、8、16进制都是0,直接返回0,不需要再执行余下的程序。
2、如下面的示意图中所示,以将十进制数转换成十六进制数为例:
将60与15进行与操作,其值就是60的十六进制的最低位。
再将60无符号右移4位,再与15进行与操作,其值就是60的十六进制的倒数第二位。
3、由上面的例子可以总结出,将一个十进制数转换为十六进制的步骤就是:
将十进制数与15相与,将结果存储到一个数组的最低位。
然后将十进制数右移4位,再与15进行与操作,其值就是该数对应的十六进制的倒数第二位。
再右移4位,与15相与...直到相与结果为0为止。
4、进而可以推理得到,10进制转换为2和8进制的规律与转换为16进制很相似,只是偏移量和相与的数字不同而已。
10进制转换为2进制的偏移量为1,相与数字为1。
10进制转换为8进制的偏移量为3,相与数字为7。
答案:
- import java.util.Arrays;
- class ArrayDemo{
- public static void main(String[] args) {
- toHex(60);
- toBin(-6);
- }
-
- //十进制-->二进制
- public static void toBin(int num){
- trans(num,1,1);
- }
-
- //十进制-->十六进制
- public static void toHex(int num){
- trans(num,15,4);
- }
-
- //十进制-->八进制
- public static void toOctal(int num){
- trans(num,7,3);
- }
-
- //进制转换的通用方法
- public static void trans(int num, int base,int offset){
- 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[32];
- int pos = arr.length ;
- while(num != 0){
- int temp = num & base;
- arr[--pos] = chs[temp];
- num = num >>> offset;
- }
-
- System.out.println("pos = " + pos);
- for(int x = pos; x < arr.length; x++){
- System.out.print(arr[x]);
- }
- System.out.println();
- }
- }
复制代码 运行结果:
在真实开发中,进制转换也不需要我们写,JDK已经通过API的方式提供给我们,直接调用即可。
示例:
- class ArrayDemo{
- public static void main(String[] args) {
- System.out.println(Integer.toHexString(60));
- }
- }
复制代码 运行结果:
示例(查表法):
- class ArrayDemo{
- public static void main(String[] args) {
- String week = getWeek(4);
- System.out.println(week);
- }
-
- public static String getWeek(int num){
- if(num > 7 || num < 1){
- return "错误的星期" ;
- }
- String[] weeks = { "","星期一" ,"星期二" ,"星期三" ,"星期四" ,"星期五" ,"星期六" ,"星期日" };
-
- return weeks[num];
- }
- }
复制代码 运行结果: