请编写二分法算法

package firstExam.tenth;

import java.util.Scanner;

/**
* 请编写二分法算法
*/

/*
* 整体思路:先对数组排序再进行查找
*/
public class Test {

public static void main(String[] args) {
    int[] array={90, 23, 45, 34, 56, 67, 89, 77, 90,12,222};

    System.out.println("\n查找的元素在排序后的数组中的下标为"+search(sort(array),222));
}

public static int[] sort(int[] a){

        int min=0;

        for(int i=0;i<a.length;i++){
            min=a[i];
            int j;
            int index=i;
            for(j=i+1;j<a.length;j++){
                if(min>a[j]){
                    min=a[j];
                    index=j;
                }
            }
                a[index]=a[i];
                a[i]=min;

        }
        System.out.println("升序排列后的数组元素为:");
        for(int num:a){
            System.out.print(num+"  ");
        }
        return a;
    }       


public static int search(int[]a,int num){

    int min=0;
    int max=a.length-1;
    int middle=(min+max)/2;
    int i=0;
    for(i=0;min<=max;i++){
        if(num<a[middle]){
            max=middle-1;
        }else if(num>a[middle]){
            min=middle+1;
        }else{

            return middle;
        }
        middle=(min+max)/2;
    }

    return -1;
}

}

//老师代码
package firstExam.tenth;

public class TeaSearch {
public static void main(String[] args) {

    int array[] = {90, 23, 45, 34, 56, 67, 89, 77, 90,12};

    array = paixu(array);

    for(int i:array){
        System.out.print(i+" ");
    }

    System.out.println("查找的元素位置在"+search(array, 2));
}
/**
 * 二分查找
 * @param array
 * @param key
 * @return
 */
public static int search(int[] array,int key){

    int start = 0;
    int end = array.length-1;

    while(start<=end){

        int middle = (start+end)/2;

        if(key < array[middle]){
            end = middle-1;
        }else if(key > array[middle]){
            start = middle + 1;
        }else{
            return middle;
        }
    }

    return -1;
}

public static int[] paixu(int[] array){

    for(int i=array.length-1;i>=0;i--){
        for(int j=0;j<i;j++){
            if(array[j]>array[j+1]){
                int temp =array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
    return array;
}

}

猜你喜欢

转载自blog.csdn.net/qq_38986609/article/details/78609451