欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

黑马程序员_毕向东_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>、期待与您交流! ----------------------