public class Main {
public static void main(String[] args) {
int[] ints = {1,2,3,4,5,6,7};
maopao(ints);
System.out.println(halfSearch(ints, 6));
}
// 选择排序:从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
private static void select(int[] ints) {
for (int i = 0; i < ints.length - 1; i++) {
for (int j = i + 1; j < ints.length; j++) {
if (ints[i] > ints[j]) {
int temp = ints[i];
ints[i] = ints[j];
ints[j] = temp;
}
}
}
}
private static void print(int[] ints) {
for (int anInt : ints) {
System.out.println(anInt);
}
}
// 冒泡排序: 相邻元素两两比较,因此最后一项不用比较,大的往后放。第一次完毕,最大值在最后面(最后一位索引)
private static void maopao(int[] ints) {
for (int i = 0; i < ints.length - 1; i++) {
for (int j = 0; j < ints.length - 1 - i; j++) {
if (ints[j] > ints[j + 1]) {
int temp = ints[j];
ints[j] = ints[j + 1];
ints[j + 1] = temp;
}
}
}
}
// 二分查找法: 数组一定是有序的
private static int halfSearch(int[] ints, int value) {
int max = ints.length - 1;
int min = 0;
int mid = (max + min) / 2;
while (ints[mid] != value) {
if (value > ints[mid]) {
min = mid;
} else if (value < ints[mid]) {
max = mid;
}
mid = (max + min) / 2;
}
return mid;
}
}
网友评论