最近正在理解java的一些基础算法的东西
我会经常更新一些自己学习过程中写的东西,建议多dbg观察一下数据每次循环的变化,这样才能加深理解。好好学习!
public class TestMath {
public static void main(String[] args) {
int arry[] = {12, 43, 12, 65, 12, 65, 12, 88, 3, 98, 1};
// System.out.println(binserch(arry,20));
maopao(arry);
}
/**
* 二分搜索(折半查找)
* 思想:将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,
* 如果要找的元素值小 于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。
* 条件:数组必须有序
* 优点:查找效率高
* 缺点:元素必须有序且插入删除困难
* 适用场景: 折半查找方法适用于不经常变动而查找频繁的有序列表。
*/
public static int binserch(int[] arr, int key) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (right + left) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else if (arr[mid] > key) {
right = mid - 1;
}
}
return -1;
}
/**
* 冒泡排序
*
* @param arr
* @return
*/
public static int[] maopao(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
//这里吧参数提出来方便dug观察每次循环的参数变化
int arrj = arr[j];
int arrj1 = arr[j + 1];
//这里为正序排序
if (arr[j] > arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
int s = arr[j];
arr[j] = temp;
}
}
}
//打印出来
for (int as : arr) {
System.out.println(as);
}
return arr;
}
}