`

二分排序 例子

 
阅读更多
题目:一个有序的数组,里面是一万个整数。随机切分两部分,然后互换位置。求一个数的位置

for example:
int[] numbers = {92, 99,101,102,104,105,109,110,115,166,300,400,500, 1, 12, 13, 34, 35, 56, 57};



public class Test
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
 
        
  
        int[] numbers = {92, 99,101,102,104,105,109,110,115,166,300,400,500, 1, 12, 13, 34, 35, 56, 57};
//        System.out.println(Test.getPosition(numbers, 0));
//        System.out.println(Test.getPosition(numbers, 1));
//        System.out.println(Test.getPosition(numbers, 11));
//        System.out.println(Test.getPosition(numbers, 13));
//        System.out.println(Test.getPosition(numbers, 33));
//        System.out.println(Test.getPosition(numbers, 35));
//        System.out.println(Test.getPosition(numbers, 43));
//        System.out.println(Test.getPosition(numbers, 57));
//        System.out.println(Test.getPosition(numbers, 66));
//        System.out.println(Test.getPosition(numbers, 92));
//        System.out.println(Test.getPosition(numbers, 97));
//        System.out.println(Test.getPosition(numbers, 99));
//        System.out.println(Test.getPosition(numbers, 100));
        System.out.println(Test.getPosition(numbers, 400));
      

    } 
    
    private static int getPosition(int[] numbers, int number)
    {
        int seperator = numbers[0];
        int low = 0;
        int high = numbers.length - 1;
        
        while(low < high)
        {
            int mid = (low + high)/2;
            int midNumber = numbers[mid];
            if(midNumber == number)
            {
                return mid;
            }

            if(number == seperator)
            {
                return low;
            }

            if(number > seperator)
            {
                if(number > midNumber&& midNumber >= seperator)
                {
                    low = mid + 1;
                }else
                {
                    high = mid - 1;
                }
            }else 
            {
                if(number < midNumber&& midNumber < seperator)
                {
                    high = mid - 1;
                }else
                {
                    low = mid + 1;
                }
            }
        }
        
        if(high >= 0&& numbers[high] == number)
        {
            return high;
        }
        if(low < numbers.length&& numbers[low] == number)
        {
            return low;
        }
        return -1;
    }
 


    
   

   
}

分享到:
评论

相关推荐

    C例子:二分查找法

    该程序是我写的博客“一起talk C栗子吧(第二十五回:C语言实例-二分查找)”的配套程序,共享给大家使用

    计算机算法分析 二分查找 分治算法

    二分查找算法是运用分治的典型例子:给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。所以容易设计出二分搜索算法:在 a[0] [1] [n-1] 中搜索 x, 找到x时返回其在数组中的位置,否则返回-...

    c语言例程大全,帮你学习c编程

    * 数据结构中的所有查找算法(二分查找,哈希查找,分块查找,顺序查找)的例子; * 数据结构中的所有排序算法(冒泡排序,堆排序,直接插入排序,二路归并排序,快速排序,基数排序,直接选择排序,希尔排序)的...

    C语言例程库(CLEL_v2.2)

    * 数据结构中的所有查找算法(二分查找,哈希查找,分块查找,顺序查找)的例子; * 数据结构中的所有排序算法(冒泡排序,堆排序,直接插入排序,二路归并排序,快速排序,基数排序,直接选择排序,希尔排序)的...

    10个C#常用的算法与数据结构例子

    算法是解决问题的一系列步骤。...查找算法:用于在数据结构中查找特定元素的算法,如线性查找、二分查找等。在C#中,可以使用List&lt;T&gt;.Contains()方法或Dictionary, TValue&gt;.ContainsKey()方法来查找元素。

    数据结构与算法-小例子.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    高效数据结构及算法模块源码

    举个例子:对超大数组进行排序,如果你用传统的选择排序(O(n^2))对一个超大数组进行排序,你恐怕得等几分钟,而采用二分思想的快速排序(最坏情况O(nlogn),最好情况O(n)),最好情况只需要很短时间。量化一下,...

    PHP工作笔记.zip

    [十一例 支付功能][十二例 文件上传AjaxFileUpload.js][十三例 文件上传Uploadify][十四例 Smarty模板][十五例 ThinkPHP5模板][十六例 二分查找][十七例 交换排序 - 冒泡排序][十八例 插入排序 - 直接插入排序][十九...

    C语言编程题

    C语言基础编程题,经典算法,如二分查找、冒泡排序、选择排序、递归排序、鸡兔同笼等经典例子。

    Golang工作笔记.zip

    [第十例 Redis集群连接][十一例 Zookeeper操作][十二例 Kafka操作][十三例 NSQ操作][十四例 二分查找][十五例 交换排序 - 冒泡排序][十六例 插入排序 - 直接插入排序][十七例 插入排序 - 希尔排序][十八例 交换排序 ...

    logcut:通过二分查找快速按时间剪切日志文件

    使用二进制搜索选择具有给定时间范围的日志文件的行。 例子: logcut -f '2 hours ago' -a /var/log/... 由于 'logcut' 使用二分查找,日志必须排序。 没有年份的日志记录,年份会被填满,但必须对其进行排序。

    数据结构算法Java实现。关于Java《数据结构算法》核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践。.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    算法集合,包含多种算法的C/C++语言的实现

    通过提供C/C++语言的算法描述,用简单的算法例子实现诸如快速排序,冒泡排序,二分查找等算法,来引导大家深入理解算法。

    数据结构复习题六.doc

    ( A ) 9、二分查找法要求待查表的关键字的值必须有序。( A ) 10、哈希法是一种将关键字转换为存储地址的存储方法。( A ) 11、在二叉排序树中,根结点的值都小于孩子结点的值。 ( B ) 12、对有序表而言,采用二分...

    Java数据结构和算法中文第二版(2)

    递归的二分查找 汉诺(Hanoi)塔问题 归并排序 清除递归 一些有趣的递归应用 小结 问题 实验 编程作业 第7章 高级排序 希尔排序 划分 快速排序 基数排序 小结 问题 实验 编程作业 第8章 二叉树...

    Java数据结构和算法中文第二版(1)

    递归的二分查找 汉诺(Hanoi)塔问题 归并排序 清除递归 一些有趣的递归应用 小结 问题 实验 编程作业 第7章 高级排序 希尔排序 划分 快速排序 基数排序 小结 问题 实验 编程作业 第8章 二叉树...

    leetcode叫数-algorithm:最近刷的算法题的总结,以及一些常用的排序、查找、BFS等算法

    目录下是关于查找的算法,目前(2020/7/23)只写了一个二分查找 src/sort 目录下是一些排序算法,目前(2020/7/23)有选择排序、快速排序、冒泡排序、归并排序 src/recursive 目录下是关于递归的学习,其中有递归...

    数据结构与算法分析_Java语言描述(第2版)

    2.4.1 一个简单的例子 2.4.2 一般法则 2.4.3 最大子序列和问题的求解 2.4.4 运行时间中的对数 2.4.5 检验你的分析 2.4.6 分析结果的准确性 小结 练习 参考文献 第3章 表、栈和队列 3.1 抽象数据类型 3.2 表ADT ...

    算法引论:一种创造性方法.[美]Udi Manber(带详细书签).pdf

    全书共分12章:第1章到第4章为介绍性内容,涉及数学归纳法、算法分析、数据结构等内容;第5章提出了与归纳证明进行类比的算法设计思想;第6章到第9章分别给出了4个领域的算法,如序列和集合的算法、图算法、几何算法...

Global site tag (gtag.js) - Google Analytics