冒泡排序
每次从数组中找到最大值放在数组的后面去。
实现冒泡排序的关键步骤分析
确定总共需要做几轮:数组的长度-1
每轮比较几次:
数组长度 - 1 (第几轮) | 比较为 | 次数规律:(数组的长度-1) - i |
0 | 0 1 2 | 3次 |
1 | 0 1 | 2次 |
2 | 0 | 1次 |
当前位置大于后一位置则交换
选择排序
每轮选择当前位置,开始找出后面的较小值与该位置交换。
选择排序的关键
确定总共需要选择几轮:数组的长度-1
控制每轮从以前位置为基准,与后面元素选择几次
i(第几轮) | 比较位 | 次数 |
0 | 1 2 3 | 3次 |
1 | 2 3 | 2次 |
2 | 3 | 1次 |
查找算法
二分查找(折半查找)
结论:二分查找正常的折半条件应该是开始位置left<=结束位置right
public class Test3 {
public static void main(String[] args) {
int[] arr = {7, 23, 79, 81, 103, 131, 147};
System.out.println(binarySearch(arr, 131));
System.out.println(Arrays.binarySearch(arr, 81));
}
/*
* 二分查找
* */
public static int binarySearch(int[] arr, int data) {
// 左右开始位置
int left = 0;
int right = arr.length - 1;
// 不知道几次使用while循环 当左边大于等于右边 循环结束
while (left <= right) {
// 二分中间
int middle = (left + right) / 2;
// 判断查找数值小于中间数值 就是数值在左半部分 就把结束right移到左边
if (data<arr[middle]){
right = middle - 1;
// 判断查找数值大于中间数值 就是数值在右半部分 就把结束left移到右边
} else if(data>arr[middle]) {
left = middle + 1;
} else {
// 相等就是查找到需要 直接返回index
return middle;
}
}
// 未查询到返回-1
return -1;
}
}