黑马程序员_毕向东_Java基础****学习笔记(十)
程序员文章站
2022-07-07 23:15:20
...
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
折半排序:
public class ArrayTest {
public static void main(String[] args) {
// int [] arr={1,5,4,6,3,8,2};
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 9 };
// System.out.println("所查元素在数组中的位置是:"+getIndex(arr,7));
// System.out.println("所查元素在数组中的位置是:"+halfSearch(arr,7));
System.out.println("所查元素在数组中的位置是:"+getIndex_2(arr,8));
}
/*
* 练习:有一个有序的数组。想要经一个元素插入到该数组中,还要保证该数组有序
* 如何获取该元素在数组中的位置?
*
*/
public static int getIndex_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 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 -1;
}
/*
* 折半查找,提高效率,但是必须要保证该数组是有序数组
*/
public static int halfSearch(int[] arr, int key) {
int min, max, mid;
min = 0;
max = arr.length;
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 = (min + max) / 2;
}
return mid;
}
// 定义功能,获取key第一次出现在数组中的位置,如果返回时-1,那么代表key在数组中不存在
public static int getIndex(int[] arr, int key) {
for (int x = 0; x < arr.length; x++) {
if (arr[x] == key)
return x;
}
return -1;
}
}
进制转换
public class ArrayTest5 {
public static void main(String[] args) {
toBin(6);
toHex(60);
}
/*
* 十进制----->十六进制
*/
public static void toHex(int num) {
StringBuffer sb = new StringBuffer();
for(int x=0;x<8;x++){
int temp=num&15;
if(temp>9)
//System.out.println((char)(temp-10+'A'));
sb.append((char)(temp-10+'A'));
else
//System.out.println(temp);
sb.append(temp);
num=num>>>4;
}
System.out.println(sb.reverse());
}
/*
* 十进制----->二进制
*/
public static void toBin(int num) {
StringBuffer sb = new StringBuffer();
while (num > 0) {
// System.out.println(num%2);
sb.append(num % 2);
num = num / 2;
}
System.out.println(sb.reverse());
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------