2020-09-18

数组冒泡排序法,二分查找法的小例

要求

随机生成16个0-99的随机数,输出正序的一维数组,查找其中一个数的位置输出下标。输出二维数组

 package com.sbs;

import java.util.Scanner;

public class mryl {
	public static void main(String[] args) {
		int[] nums = new int [16];
		for (int i = 0; i < nums.length; i++) {
			   nums[i] = (int)(Math.random()*100);
		}		  		 
		  //冒泡算法排序
		  //引入第三变量,用于比较后交换数值
		   int temp;                                            
		  //内层循环控制的是,每轮比较的次数
		  for(int i=0;i<nums.length-1;i++) {			  
				//第i轮(i从0开始计算), 比较次数为:length-i-1
				for(int j=0;j<nums.length-i-1;j++) {
					if(nums[j]>nums[j+1]) {
						//两两相比, 满足移动条件
						temp = nums[j];
						nums[j] = nums[j+1];
						nums[j+1] = temp;
					}
				}
		    }
		  //打印一维数组
		  System.out.print(" 随机生成的一维数组:");
		  for(int i=0;i<nums.length;i++) {
				System.out.print( nums[i]+" ");
			}
		     System.out.println();
		  //接收用户输入的查找的数,用二分法查找
		   System.out.println("请输入查找的数");
			  Scanner sc2 = new Scanner(System.in) ;  
			  int num1 =sc2.nextInt();
			//	最小范围下标
			int minIndex = 0;
			//	最大范围下标
			int maxIndex = nums.length-1;
			//	中间数据下标
			int centerIndex = (minIndex+maxIndex)/2;
			while(true) {
				//中间数据较大
				if(nums[centerIndex]>num1) {					
					maxIndex = centerIndex-1;
				}
				//中间数据较小
				else if(nums[centerIndex]<num1) {					
					minIndex = centerIndex+1;
				}
				else {
			    //找到了数据  数据位置:centerIndex
					break;
				}
				
				if(minIndex > maxIndex) {
					centerIndex = -1;
					//提示没找到
					System.out.println("数组中没找到"+num1);
					break;
				}
				//当边界发生变化, 需要更新中间下标
				centerIndex = (minIndex+maxIndex)/2;
			            }			
			System.out.println("位置:"+centerIndex);
			//定义二维数组
			int[][] num = new int[4][4];
            //定义一个变量作为一维数组的下标
			  int  index = 0;
			  // 控制二维数组行数
			  for (int i = 0; i < 4; i++) {
              //控制二维数组列数
			   for (int j = 0; j < 4; j++) {
              //把一维数组的内容按顺序赋值给二维数组
			    num[i][j] = nums[ index++];			    
			   }
			  }
			  //打印二维数组
			  System.out.println("二维数组如下:");
			  for (int i = 0; i < 4; i++) {
			  for (int j = 0; j< 4; j++) {
			    System.out.print( num[i][j]+ "\t");
			   }

			   System.out.println();

			  }
		}		  
		 


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值