/**
* 选择排序 算法实现
* 折半查找 算法实现
*/
public class Test {
public static void main(String[] args) {
int[] arr = {2, 3, 5, 4, 1};
/**
* 选择排序
* i < arr.length - 1 交换次数最多n-1次
* j < arr.length 比较次数(n-1)(n-1+1)/2
*/
for (int i = 0; i < arr.length - 1; i++) { // 外循环,n个元素进行n-1轮排序
int min = i;
for (int j = i + 1; j < arr.length; j++) { // 内循环,遍历i之后的所有元素
// 1.比较
if (arr[j] < arr[i]) {
min = j;
}
}
// 2.交换
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
System.out.println(Arrays.toString(arr));
System.out.println("输入整数,程序判断该整数是否在数组中");
Scanner scan = new Scanner(System.in);
int inputNum = scan.nextInt();
/**
* 折半查找
* 前提保证数据有序,然后使用折半查找
* 升序和降序都可以,取决算法实现逻辑
* 数据升序排序:if(num > middle),右移
* 数据降序排序:if(num > middle),左移
*/
int start = 0, end = arr.length - 1, middle = (start + end) / 2;
while (start <= end) { // 只要 start <= end 就要比较
if (inputNum == arr[middle]) {
break;
}
if (inputNum > arr[middle]) { // 右移
start = middle + 1;
}
if (inputNum < arr[middle]) {
end = middle - 1;
}
middle = (start + end) / 2; // 每次比较结束,重新计算middle
}
if (start <= end) {
System.out.println("整数" + inputNum + "在数组中");
} else {
System.out.println("整数" + inputNum + "不在数组中");
}
}
}