选择排序和二分法
使用二分法查找数组中某个值得位置是要在数组提前排好序的前提下才能使用,所以要将数组进行排序。
数组排序有冒泡排序,选择排序,插入排序等,今天我们使用选择排序对数组进行排序。
测试类代码如下图
运行结果如下图
(位置为i+1)所以位置是从1开始
选择排序代码
public class Sort13 {
public void selectionSort(int[] list) {
for (int i = 0; i < list.length; i++) {
int minNum = list[i];
int minIndex = i;
for (int j = i + 1; j < list.length; j++) {
if (minNum > list[j]) {
minNum = list[j];
minIndex = j;
}
}
if (minIndex != i) {
list[minIndex] = list[i];
list[i] = minNum;
}
}
for (int i : list) {
System.out.print(i + " ");
}
System.out.println();
}
}
二分法查找需要继承选择排序类。因为二分法需要在数组排好序的前提下使用
代码如下
public class Serach13 extends Sort13 {
public String serach(int[] list, int k) {
selectionSort(list);
int low = 0;
int height = list.length - 1;
while (height >= low) {
int mid = (height + low) / 2;
if (k > list[mid]) {
low = mid + 1;
} else if (k == list[mid]) {
return "查找的值得位置在数组第" + (mid + 1) + "个";
} else {
height = mid - 1;
}
}
return "-1";
}
}
测试类代码如下
public class Test13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] list = { 1, 5, 8, 7, 9, 22, -10, -30, 100 };
Sort13 sort = new Sort13();
Serach13 serach = new Serach13();
System.out.println("传入的数组为:");
for (int i : list) {
System.out.print(i + " ");
}
System.out.println();
System.out.print("请输入需要查找的值:");
Scanner inputScanner = new Scanner(System.in);
int n = inputScanner.nextInt();
// sort.selectionSort(list);
System.out.println("排序后的数组为:");
System.out.println(serach.serach(list, n));
}
}