这几天的主要任务是与另一个项目组对接,所以有些时间是在互相等待对方解决问题,为了不浪费时间就复习了一些Java基础知识。先写两个算法吧,冒泡排序与二分法查找。
代码还算规范,可以改进的地方在二分法查找的前提是数组结点是有系的而且每个结点不重复,这里并没有做数组节点是否重复的判断,有兴趣的童鞋就加一下吧。
import java.io.*;
import java.util.*;
/**
* 输入几个整数,
* 先按从小到大按冒泡排序,
* 再用二分法查找
*/
public class BinarySearch {
private static final int LENGTH = 10;
public static void main(String[] args){
int[] array = inputArray(LENGTH);
System.out.println("排序前:");
printArray(array);
System.out.println("\n排序后:");
// 排序
sortArray(array);
printArray(array);
System.out.println("\n请输入要查找的值:");
int value = inputInt();
// 查找
int index = binarySearch(array, value);
if(-1 == index){
System.out.println("没有找到" + value);
}else{
System.out.println(String.format("%d在数组的第%d个位置", value, index+1));
}
}
/**
* 冒泡排序
*/
private static void sortArray(int[] array){
int temp;
for(int i = 0; i < array.length; i++){
for(int j = array.length-1; j > i; j--){
if(array[j-1] > array[j]){
temp = array[j-1];
array[j-1] = array[j];
array[j] = temp;
}
}
}
}
/**
* 二分查找法
*/
private static int binarySearch(int[] array, int value){
int left=0;
int right = array.length-1;
while(left<=right){
int middle = (left + right) / 2;
if(value == array[middle]){
return middle;
}else if(value > array[middle]){
left = middle + 1;
}else{
right = middle - 1;
}
}
return -1;
}
/**
* 输入整数保存到数组中
*/
private static int[] inputArray(int length){
int[] array = new int[length];
System.out.println(String.format("请输入%d个整数:", length));
for(int index=0; index < length; index++){
System.out.print(String.format("%d:",index+1));
array[index] = inputInt();
}
return array;
}
/**
* 输入单个整数
*/
private static int inputInt(){
Scanner scanner = new Scanner(System.in);
while(true){
try{
int result = scanner.nextInt();
return result;
}catch(Exception ex){
scanner.nextLine(); // 忽略错误的这一行
System.out.println("输入有误,请重新输入一个整数:");
}
}
}
/**
* 输出数组内容
*/
private static void printArray(int[] array){
for(int node : array){
System.out.print(node+",");
}
}
}