`

二分排序 例子

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

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;
    }
 


    
   

   
}

分享到:
评论

相关推荐

    hadoop 二次排序 原理

    首先,二次排序是在MapReduce框架内进行的一种特殊排序方式,它遵循两个主要步骤:第一字段排序和相同第一字段下的第二字段排序。这种排序模式确保了在处理大量数据时,具有相同第一字段的记录会聚集在一起,然后再...

    C例子:二分查找法

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

    c算法(贪婪、二分、排序、拓扑等)

    典型的例子是二分查找,它在有序数组中寻找目标值,每次将查找区间减半,直到找到目标或确定不存在。二分算法具有高效性,时间复杂度通常为O(log n)。 接着,**排序算法**是处理数据序列的常用工具。常见的排序算法...

    二分查找_测试

    但二分查找的前提条件是数据必须已经排序,如果数据未排序,需要先进行排序,这会增加额外的时间成本。 以下是二分查找的基本步骤: 1. 确定数组的中间索引,即 `mid = (left + right) / 2`。 2. 如果中间元素等于...

    排序与查找算法例子

    2. **二分查找**:适用于有序数组,通过不断取中间元素与目标比较来缩小搜索范围。时间复杂度为O(log n)。 3. **哈希查找**:通过哈希函数将目标元素映射到数组的特定位置,理想情况下查找只需要一次。但在存在冲突...

    二分搜索算法、快速排序,算法分析与设计(完整的代码,结合例题详细解析) 全套资源,求抱走!!!

    二分搜索算法是一种基于分治策略的高效查找算法,它适用于已排序的数组。在给定的数组`a[0 : 8]={1, 8, 12, 15, 16, 21, 30, 35, 39}`中,我们可以通过二分搜索来解决以下三个问题: 1) 查找30:二分搜索首先找到...

    二分查找最简单教程

    举一个整数区间上的二分查找的例子,假设我们有一个整数数组,并想找到数组中是否存在某个特定的数字。通过二分查找,我们可以快速判断出该数字是否存在数组中,如果存在,还能返回其索引位置。此外,二分查找还能...

    二分查找算法 VC++

    在这个例子中,我们首先定义了二分查找函数`binarySearch`,然后在`main`函数中创建了一个已排序的数组,并调用`binarySearch`函数寻找目标值10。如果找到,输出其索引;如果没有找到,输出“元素不在数组中”。 二...

    erfenchaz.rar_二分查找_二分查找函数

    2. **查找失败时返回-1**:在二分查找过程中,如果从未排序的数组中找不到目标值,函数通常会返回一个特殊值表示查找失败。在这个例子中,返回值为-1,表示目标元素不在数组中。 3. **测试程序**:测试程序用于验证...

    C语言数据结构-折半插入排序

    在这个例子中,`binary_search`函数实现了二分查找,`binary_insertion_sort`函数完成了整个排序过程。`print_array`函数用于输出排序后的数组。 总结来说,折半插入排序是插入排序的一种优化版本,通过结合二分...

    C#数据结构 排序 栈和栈的应用 树和二叉树 递归 例子

    例如,二分查找树(Binary Search Tree)在插入、删除和查找操作上具有很好的性能。 最后是递归。递归是解决问题的一种方法,它通过调用自身来解决子问题。在C#中,递归函数需要一个明确的终止条件,以防止无限循环...

    4.4 二分检索1

    二分检索是一种高效的查找算法,尤其适用于已排序的列表或数组。它的基本思想是通过不断将待搜索区域减半来快速定位目标值。在【标题】"4.4 二分检索1"中,我们可以看到这个主题是关于数据类型的运用,特别是关于二...

    java数组二分查找

    二分查找是一种在有序数组中寻找特定元素的搜索算法,其效率显著高于线性查找。本篇文章将详细探讨Java中的二分查找及其应用。 首先,我们要了解什么是数组。在计算机科学中,数组是一种数据结构,它存储了一组相同...

    二分插入排序-易语言

    这个例子中的代码实现了二分插入排序的基本功能,但实际应用中可能需要进行错误处理和性能优化。二分插入排序虽然不是最高效的排序算法(如快速排序、归并排序等),但它具有稳定的排序特性,并且在特定场景下表现出...

    排序算法汇总.pdf

    - **交换排序**:通过元素间的相互交换来达到排序的目的,典型的例子如冒泡排序。 - **归并排序**:采用分治法的思想,将数组分成两半,递归地排序这两半,然后将它们合并成一个有序数组。 - **分配排序**:包括基数...

    内部排序的方法——半插入排序

    半插入排序,也称为二分插入排序,是一种在内部排序领域广泛应用的算法,尤其适用于小规模或部分有序的数据集。这种排序方法结合了直接插入排序的简单性和二分查找的效率,通过减少比较次数来提高排序性能。以下是半...

    最快的排序算法是什么,排序算法数据结构

    在数据量较少的情况下(),TimSort 使用插入排序,否则使用归并排序和二分搜索来提高排序效率。这种混合策略使得 TimSort 在排序性能上具有很高的稳定性和效率。 在以下的例子中,我们使用扑克牌对象来比较冒泡...

    数据排序见伯仲PPT学习教案.pptx

    "不分伯仲"意味着两者没有明显的高低之分,这在数据排序中可能对应于相同的关键字值。 在具体操作中,排序一般包括以下几个步骤: 1. **选择数据范围**:首先,你需要选择要进行排序的数据区域。这可以通过点击并...

    插入排序 减治法——C语言代码

    请注意,这段描述提到这是“萌新代码”,所以可能不会包含优化措施,例如二分查找法来提高插入操作的效率。在实际应用中,对于大型数据集,插入排序的效率相对较低,更适合于小型或者部分有序的数据。 总的来说,...

    数据结构之排序

    折半插入排序是在直接插入排序的基础上,利用二分查找法减小了查找插入位置的时间复杂度,提高了效率。希尔排序是一种改进的插入排序,通过设置间隔序列,使得原本远距离的元素有机会提前进行比较,从而减少了排序...

Global site tag (gtag.js) - Google Analytics