Java开发体系学习之基础(八)选择排序 二分法查找数组 数组逆序

时间:2021-12-14 17:09:29
/*
	 * 选择排序:
	 * 1.首先在未排序序列中找到最小(大)序列,存放到牌序序列的最小位置
	 * 2.然后,再从剩下未排序中继续寻找最小(大)元素,然后放到排序的末尾
	 * 3.重复一二步,直到所有元素排序完成
	 */
	//假设数组中的元素为 13,46,22,65,3
	/*第零轮
	 * 13 46 22 65 3 13<46  不交换    arr[0]与arr[1]比较  
	 * 13 46 22 65 3 13<22  不交换   arr[0]与arr[2]比较
	 * 13 46 22 65 3 13<65 不交换   arr[0]与arr[3]比较
	 * 13 46 22 65 3 13>3     交换      arr[0]与arr[4]比较
	 * */
	//此时零位置确定
	/*第一轮
	 * 3 46 22 65 13 46>22      交换    arr[1]与arr[2]比较  
	 * 3 22 46 65 13 22<65   不交换   arr[1]与arr[3]比较
	 * 3 22 46 65 13 122>13    交换   arr[1]与arr[4]比较
	 * */
	//此时一位置确定
	/*第二轮
	 * 3 13 46 65 22 46<65    不交换    arr[2]与arr[3]比较  
	 * 3 13 46 65 22 46>22       交换   arr[2]与arr[4]比较
	 * */
	//此时二位置确定
	/*第三轮
	 * 3 13 22 65 46 65<46        交换    arr[3]与arr[4]比较  
	 * */
	//此时三四位置确定  3 13 22 46 65
	public static void xuanze(int[] arr) {
		//循环数组长度-1次
		for(int i=0;i<arr.length-1;i++) {
			for(int j=i+1;j<arr.length;j++) {
				if(arr[i]>arr[j]) {
					int temp=arr[i];
					arr[i]=arr[j];
					arr[j]=temp;
				}
			}
		}
		for(int z=0;z<arr.length;z++) {
			System.out.println(arr[z]);
/*
	 * 数组逆序:
	 * 逆序算法:
	 * 第一个 和最后一个互换
	 * 分奇数和偶数,但最后实际代码测试,好像不用奇偶
	 */
	public static void shuzunixu(int[] arr) {
		//分奇数和偶数
		int length=arr.length;
		//if(length%2==0) {
			for(int i=0;i<length/2;i++) {
				int k=arr[i];//0 1
				arr[i]=arr[length-i-1];//3 2
				arr[length-i-1]=k;
			}
		/*}else if(length%2!=0){
			//假设5位
			  for(int i=0;i<length/2;i++) {
				  int k=arr[i];//0 1
				  arr[i]=arr[length-i-1];//4 3
				  arr[length-i-1]=k;
			  }*/
		//}
		for(int z=0;z<arr.length;z++) {
			System.out.println(arr[z]);
		}
	}
}
/*
	 * 数组的二分法查找
	 * 搜索过程从数组中间开始查找
	 * 前提:数组必须有序
	 */
	//arr={23,34,45,56,67,78,89}
	public static void erfenfa(int[] arr,int keyword) {
		//获取数组长度
		int max=arr.length-1;
		int min=0;
		int mid=(max+min)/2;
		//索引
		//int index=-1;
		while(min<=max) {
		  mid=(max+min)/2;
		   if(keyword<arr[mid]) {
			    max=mid;
		   }else if(keyword>arr[mid]){
			    min=mid;
		   }else if(keyword==arr[mid]){
			    System.out.println(mid);
			    break;
		   }else {
			   System.out.println("您要查找的数字没找到");
		   }
		}