冒泡 二分查找 排序的问题
public static void main(String[] args) {
int [] arr ={4,3,7,1,6};
//冒泡
for (int i = 0; i < arr.length-1; i++) { //因为下面有 i+1(跟下一个元素作对比)需要减一 不然会出现数组下标越界
boolean flag = true;
for (int j = 0; j < arr.length-i-1; j++) {
if (arr[j]>arr[j+1]){
flag=false;
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
if (flag){
break;
}
}
System.out.println(Arrays.toString(arr));
}
⭐ int[] arr = {5, 8, 19, 23, 15, 14, 0}; //可以用sort替代
Arrays.sort(arr); //不需要接收返回值,只要排序了,就会数组的原本进行永久更改.
System.out.println(Arrays.toString(arr));
二分查找
public static void main(String[] args) {
//二分查找的前提数组一定有序,无序不能用二分查找.
int[] arr = {15, 23, 28, 30, 33, 39, 43, 44, 49, 50, 51};
int target = 50;
//定义出三个箭头所表示的索引值.
int min = 0;
int max = arr.length - 1;
int middle;
int targetIndex = -1;
int count = 0;
//当min的值小于max的值的时候,证明数据还有找到的可能性,则继续寻找.
while (min <= max) {
count++;
//每次循环一进来,先计算middle的中间索引值.
middle = (min + max) / 2; //int / int结果是没有小数的.
if (target > arr[middle]) {
min = middle + 1;
} else if (target < arr[middle]) {
max = middle - 1;
} else {
targetIndex = middle;
break;
}
}
//当while循环结束了,min>max,证明要查找的数据没有.
if (targetIndex == -1) {
System.out.println("您要查询的数据" + target + "在数组中不存在.");
System.out.println("总计查询了" + count + "次.");
} else {
System.out.println("您要查询的数据" + target + "在数组中的索引是" + targetIndex);
System.out.println("总计查询了" + count + "次.");
}
}
⭐ int[] arr = {5, 8, 19, 23, 15, 14, 0}; //可以用binarySearch 方法
Arrays.sort(arr);
int index = Arrays.binarySearch(arr, 5);
System.out.println("目标0在数组中的索引是:" + index);