• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android 算法 关于递归和二分法的小算法,android二分法

Android 算法 关于递归和二分法的小算法,android二分法

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 二分查找,二分法查找算法,二分法算法,java二分法查找算法,二分法排序算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android 算法 关于递归和二分法的小算法,android二分法


 // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1。
package demo;

public class Mytest {
    public static void main(String[] args) {
        int[] arr={1,2,5,9,11,45};
        int index=findIndext(arr,0,arr.length-1,12);
        System.out.println("index="+index);
    }
    // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1。
    public static int findIndext(int[] arr,int left,int right,int abc){
        if(arr==null||arr.length==0){
            return -1;
        }
        if(left==right){
            if(arr[left]!=abc){
                return -1;
            }
        }
        int mid=left+(right-left)/2;//3//4
        if(arr[mid]>abc){//
            right=mid-1;
            return findIndext(arr,left,right,abc);
        }else if(arr[mid]<abc){//5<45//9<45/11<45
            left=mid+1;
            return findIndext(arr,left,right,abc);//2,5//3,5//4.5
        }else{
            return mid;
        }
    }
    
    
    
    
}

 



 
/ 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1。

// array 升虚数组
public int find(int[] array, int n){
    if(array == null){
        return -1;
    }
    
    int len = array.length;
    if(n < array[0] || n > array[len-1]){
        return -1;
    }
    
    int left     = 0;
    int right    = len -1;
    while(left < right){
        int mid    = left + (right - left) / 2;
        
        if(array[mid] == n){
            return mid;
        }else if(array[mid] < n){
            left    = mid + 1;
        }else{
            right    = mid - 1;
        }
    }
    
    if (array[left] == n){
        return left;
    } else {
        return right;
    }
}







// 2. 写一个函数将一个数组转化为一个链表。
// 要求:不要使用库函数,(如 List 等)

public static class Node{
    Node next;
    int data;
}

// 返回链表头
public Node convert(int[] array){
    if(array == null || array.length == 0){
        return null;
    }
    
    Node head    = new Node();
    head.data     = array[0];
    int len      = array.length;
    
    Node end     = head;
    for(int i=1; i< len ; i++){
        end = addNode(end, array[i]);
    }
    
    return head;
}

// 给链表尾部添加一个节点
public Node addNode(Node end, int data){
    Node node    = new Node();
    node.data     = data;
    end.next     = node;
    return node;
}






// 3. 有两个数组,[1,3,4,5,7,9] 和 [2,3,4,5,6,8],用上面的函数生成两个链表 linkA 和
// linkB,再将这两个链表合并成一个链表,结果为[1,2,3,4,5,6,7,8,9].
// 要求:不要生成第三个链表,不要生成新的节点。
// 3.1 使用递归方式实现

// 
public Node comb(int[] arrayA, int[] arrayB){
    Node linkA    = convert(arrayA);
    Node linkB    = convert(arrayB);
    Node head;
    if(linkA.data == linkB.data){
        head    = linkA;
        linkA   = linkA.next;
        linkB   = linkB.next;
        head.next = null;
    }else if (linkA.data < linkB.data){
        head    = linkA;
        linkA   = linkA.next;
        head.next = null;
    }else {
        head    = linkB;
        linkB   = linkB.next;
        head.next = null;
    }
    
    Node end    = head;
    comb(end, headA, headB);
    
    return head;
}

// 实现递归
public void comb(Node end, Node headA, Node headB){
    if(headA == null && headB == null){
        return;
    }else if(headA == null){
        end.next = headB;
        return;
    }else if(headB == null){
        end.next = headA;
        return;
    }
    
    if(headA.data < headB.data){
        end.next = headA;
        headA    = headA.next;
        end      = end.next;
        end.next = null;
        comb(end, headA, headB);
    }else if(headA.data == headB.data){
        end.next = headA;
        headA    = headA.next;
        headB    = headB.next;
        end      = end.next;
        end.next = null;
        comb(end, headA, headB);
    }else {
        end.next = headB;
        headB    = headB.next;
        end      = end.next;
        end.next = null;
        comb(end, headA, headB);
    }
}










// 3.2 使用循环方式实现

// 循环实现
public Node comb(int[] arrayA, int[] arrayB){
    



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android 算法 关于递归和二分法的小算法,android二分法

相关文章

  • 2017-05-26Android 手机卫士--确认密码对话框编写,android确认密码
  • 2017-05-26安卓界面组件----时间日期拾取器,安卓拾取
  • 2017-05-26Android系统的“程序异常退出”,android退出
  • 2017-05-26Android微信支付SDK开发,android支付sdk
  • 2017-05-26一个pycharm引起ubuntu桌面丢失的惨案
  • 2017-05-26android 5.0后对于apk 跑32 64 的逻辑
  • 2017-05-26TCP的三次握手,TCP三次握手
  • 2017-05-224.1.1 Activity初学乍练
  • 2017-05-26viewPager使用时加载数据时显示IllegalStateException异常,解决不了。。。。,viewpager取消预加载
  • 2017-05-26Android基础部分再学习---activity的生命周期

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android定位&amp;地图&amp;导航——自定义公交路线代码,android定位城市
    • 『BUG』Android Studio 64位 始终提示 JVM 启动不了,JDK配置失败,error code,androidjvm
    • Android GreenDAO3.0——entity建模,androidgreendao3.0
    • Android应用开发必备的20条技能
    • Android保持屏幕常亮,android屏幕常亮
    • Android数据存储之SQLite
    • java.lang.IllegalArgumentException: Illegal character in query at index 261,
    • 硅谷商城第二版3--分类模块,硅谷商城第二版3--
    • Android Log Tag含义,androidlogtag含义
    • android:giavity和layout_gravity的区别

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有