选择排序 , 二分查找
选择排序基础
int[] arr = {5,1,3,2};
//2. 定义一个循环控制选择几轮? arr.length - 1
for (int i = 0; i < arr.length - 1; i++) {
//i = 0 j = 1 2 3
//i = 1 j = 2 3
//i = 2 j = 3
//3.定义内部循环, 控制选择几次
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;
}
}
}
System.out.println(Arrays.toString(arr));
=========================================
二分查找一定要先排好序
二分查找的方法
public static int binarySearch(int[] arr , int data){
//1. 定义左边位置 和 右边位置
int left = 0;
int right = arr.length-1;
//2.开始循环,折半查询
while(left <= right){//使用while循环控制查询(条件是左边位置<=右边位置)
//取中间索引
int middleIndex = (left + right) / 2;
//3. 判断当前中间位置的元素和要查找的元素大小情况
if (data > arr[middleIndex]){//如果传入的数比中间索引的数大(证明在右边)
// 往右边找, 左位置更新为 = 中间索引+1
left = middleIndex + 1;//所以最左边那个索引 占中间那个索引+1
}else if (data < arr[middleIndex]){//如果传入的数比中间索引的数小(证明在左边)
//往左边找, 右位置更新为 = 中间索引 -1
right = middleIndex - 1;//所以最右边那个索引 占中间那个索引-1(前一个)
}else {
return middleIndex;
}
}
return -1;
//=======================================
Lambda 表达式基本作用 : 简化函数式接口的匿名内部类的写法
Lambda 表达式有什么使用前提? : 必须是接口的匿名内部类 , 接口中只能有一个抽象方法
Swimming sw = ()-> {
System.out.println("我在游泳");
};
sw.swim();
//====================================
go(()-> {
System.out.println("我在游泳");
});
}
public static void go(Swimming s){
System.out.println("游泳开始");
s.swim();
System.out.println("游泳结束");
}
}
interface Swimming{
void swim();
}
第二种究极简化如下
Integer[] arr = {10,14,30,35,88};
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return 0;
}
});
//============================================
//简化后
Arrays.sort(arr,(Integer o1, Integer o2)-> {
return 0;
});
Arrays.sort(arr,(o1,o2)-> 0);
浙公网安备 33010602011771号