有序数组二分查找实现:
public class BinarySearch{
/*
int midArray = (rightArray - leftArray) / 2; //每次循环都会改变,要重新算
int midArray = leftArray + (rightArray - leftArray)/2; //为了防止溢出,
*/
public static int binarySearch(int[] array, int key) {
int leftArray = 0;
int rightArray = array.length;
//[leftArray, rightArra)区间还有数继续循环
while(leftArray < rightArray){
int midArray = leftArray + (rightArray - leftArray)/2;
if(key == array[midArray]){
return midArray;
}else if(key < array[midArray]){
rightArray = midArray;
}else{
leftArray = midArray + 1;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = {
1,2,3,4,5,6,7,8,9};
int index1 = binarySearch(array,7);
System.out.println("7 的下标是:" + index1);
}
}
运行结果:

冒泡排序
import java.util.Arrays;
public class BubbleSort{
public static void bubbleSort(int[] array){
//本质上是 减治算法
int tmp = 0;
for(int i=0; i<array.length-1; i++){
//控制比较次数
boolean isSwapped = false;
//经过两两比较,将最大的数冒泡到最后
for(int j=0; j < array.length - i - 1; j++){
if(array[j] > array[j+1]) {
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
isSwapped = true;
}
}
if(!isSwapped){
//优化
return;
}
}
}
public static void printArray(int[] array){
for(int i=0; i<array.length; i++){
System.out.printf("%d ",array[i]);
}
System.out.println();
}
public static void main(String[] args){
int[] randomArray = new int[]{
3,5,2,12,3,56,75,32};
//System.out.println(Arrays.toString(bubbleSort(randomArray)));//错误
System.out.print("使用自定义方法打印数组: \t");
printArray(randomArray);
System.out.print("使用toString方法打印数组: \t");
System.out.println(Arrays.toString(randomArray));//使用 toStirng()方法打印数组
bubbleSort(randomArray);
System.out.print("排序后的数组: \t\t\t");
System.out.println(Arrays.toString(randomArray));
//System.out.println(bubbleSort(randomArray));
//错误: 此处不允许使用 '空' 类型
//System.out.println(bubbleSort(new int[]{ 3,5,2,12,3,56,75,32}));
//错误: 此处不允许使用 '空' 类型
//System.out.println(bubbleSort(randomArray)); 中直接传入数组是无法打印的,要使用toString()方法
}
}

还没有评论,来说两句吧...