二分搜索的递归实现算法

来源:互联网 发布:淘宝女士冬季鞋款 编辑:程序博客网 时间:2024/06/06 00:49

二分搜索的递归实现算法

题目描述:
这里写图片描述

Java实现:

//import java.util.Arrays;//import java.util.Random;import java.util.Scanner;public class BinarySearch {//二分搜索 递归实现    public static void main(String[] args) {        // TODO 自动生成的方法存根        Scanner scan = new Scanner(System.in);          //System.out.print("二分搜索,输入二分搜索元素个数:");        int n = scan.nextInt();        //手动输入数组        int list[] = new int[n];        for (int i = 0; i < list.length; i++)            list[i] = scan.nextInt();        list = bubbleSort(list);//      //随机生成数组//      Random random = new Random();//      int list[] = new int[n];//      for (int i = 0; i < list.length; i++)//          list[i] = random.nextInt(11);//      //将随机生成的数组排序//      Arrays.sort(list);//      //打印随机生成的数组//      System.out.print("随机生成的0-10数组:");//      for (int i = 0; i < list.length; i++)//          System.out.print(list[i] + " ");//      System.out.println();//      System.out.print("二分搜索,输入要搜索的元素:");        int num = scan.nextInt();        System.out.println( er(list, 0, list.length-1, num));    }    //非递归    public static int binarySearch1(int a[], int x, int n){        //在a[0] <= a[1] <= ... <= a[n-1]中搜索x (有序数组)        //找到x时返回其在数组中的位置,否则返回-1        int left = 0;        int right = n-1;        while(left <= right){            int middle = (left + right)/2;            if(x == a[middle])                return middle;            if(x > a[middle])                left = middle+1;            else                right = middle-1;           }           return -1;    }    //递归    public static int er(int a[],int start,int stop,int num)    {        if(start>stop)             return -1;        int mid=(start+stop)/2;        if(a[mid]==num)            return mid;        if(a[mid]>num)            return er(a,start,mid-1,num);        return er(a,mid+1,stop,num);    }    public static int[] bubbleSort(int[] args){//冒泡排序算法           for(int i=0;i<args.length-1;i++){              for(int j=i+1;j<args.length;j++){                  if (args[i]>args[j]){                      int temp=args[i];                      args[i]=args[j];                      args[j]=temp;                  }               }         }         return args;      }}
原创粉丝点击