1 package com.hanqi.z1p1; 2 3 import java.util.Random; 4 import java.util.Scanner; 5 6 public class Homework0513 { 7 8 public static void main(String[] args) { 9 // TODO 自动生成的方法存根 10 Random r1 = new Random(); 11 int[] array = new int[10]; 12 for (int i = 0; i < array.length; i++) { 13 14 array[i] = r1.nextInt(100); //0-99的随机数 15 } 16 // 遍历输出数组 17 System.out.println("数组的原始顺序"); 18 for (int t : array) { 19 System.out.print(t + " "); 20 } 21 22 //2.冒泡排序 23 System.out.println("排序后的顺序"); 24 //总的循环次数 25 for (int k = 0; k < array.length - 1; k++) { 26 //优化:每次冒泡时的循环次数,比上一次少1 27 for (int i = 0; i < array.length - 1-k; i++) { 28 if (array[i] > array[i + 1]) { 29 // 从小到大排列 30 int zhong = array[i]; 31 array[i] = array[i + 1]; 32 array[i + 1] = zhong; 33 34 } 35 } 36 System.out.println("数组第" + (k + 1) + "次排序后的顺序"); 37 for (int t : array) { 38 System.out.print(t + " "); 39 } 40 } 41 //3.二分查找 42 43 //1)计算出数组的中间位置:(开始位置索引+结束位置索引)/2 44 45 //2)取出中间未知的值和要查找的数字比较,根据比较结果决定下一步查找的部分 46 //3)计算出下一部分数组的中间位置 47 48 //要查找的值 49 Scanner sc= new Scanner(System.in); 50 System.out.println("请输入要查找的数"); 51 int a=sc.nextInt(); 52 53 54 int w=-1;//-1代表没找到 55 //开始索引 56 int start=0; 57 //结束索引 58 int end=array.length-1; 59 //循环条件 60 while(start<=end) 61 { 62 int m=(start+end)/2; 63 if(a==array[m]) 64 { 65 w=m;//找到了 66 break; 67 } 68 else if(a>array[m]) 69 { 70 start=m+1; 71 } 72 else 73 { 74 end=m-1; 75 } 76 } 77 System.out.println("找到的位置是"+w); 78 79 } 80 81 }
运行结果: