zoukankan      html  css  js  c++  java
  • 二分查找、中位数查找

    注意递归停止的要求,要么中间找到返回m

              要么start==end找到返回m,

              要么还是找不到,返回-1.

    int Binary_search(int *a,int start,int end,int x){
      if(start==end){
        if(a[start]==x)
          return start;
        else
          return -1;
      }
      int m=(start+end)/2;
      if(x>a[m]){
        Binary_search(a,m+1,end,x);
      }
      else if(x<a[m]){
        Binary_search(a,start,m-1,x);
      }
      else
        return m;
    }

    void swap(int a, int b){
    int temp=a;
    a=b;
    b=temp;
    }

    中位数查找:在大小为N的数组中查找第k大(1<=k<=n)的数字并返回。

    int Median_search(int *a,int start,int end,int x){
      if(end-start+1<x)
      return -1;
      int j=start;
      for(int i=start+1;i<end;i++){
        if(a[i]<a[start]){
          ++j;
          swap(a[i],a[j]);
        }
      }
      swap(a[start],a[j]);
      if(j-start+1==x){
        return a[j];
      }
      else if(j-start+1>x)
        return Median_search(a,start,j-1,x);
      else
        return Median_search(a,j+1,end,x+start-j-1);
    }

  • 相关阅读:
    闭包的一个经典例子
    手机归属地查询API
    安卓模拟器导入通讯录
    使用RazorGenerator实现项目模块分离
    .met mvc 一种判断是否已登录的方式
    stl 空间配置器理解
    STL 生成全排列
    KMP算法理解
    解决八皇后问题,递归与非递归方式两种
    获取第K大的数
  • 原文地址:https://www.cnblogs.com/huangshan/p/3386704.html
Copyright © 2011-2022 走看看