数组冒泡排序法,二分查找法的小例
要求
随机生成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();
}
}
}