【问题标题】:Recursive Binary Search and Sorting递归二进制搜索和排序
【发布时间】:2019-08-06 15:21:43
【问题描述】:

我正在阅读一个包含未排序数字的列表:

5 24 27 23 8 6 19

我搞定了二分搜索,但我不知道如何使用它来按顺序插入值。我需要更改我的 insertInOrder 方法,以便数字按升序排列。我现在的方法除了向后打印列表之外并没有真正做任何事情。

static void insertInOrder( int[] arr, int cnt, int newVal )
{

    int index = -( bSearch( arr, 0, arr.length-1, newVal)) - 1;
    {
            for ( int i = cnt; i >= index+1 ; --i)
            {
                    arr[i] = arr[i-1];
            }

        arr[index] = newVal;
    }

}

public static int bSearch(int[] a, int lo, int hi, int key)
 {
    int mid = lo+(lo + hi)/2;

    if (lo <= hi) 
        return -(lo+1); 
    else if (a[mid] == key) 
        return mid;
    else if (a[mid] < key)
        return bSearch(a, mid+1, hi, key);
    else 
        return bSearch(a, lo, mid-1, key);
 }

编辑:

input: 5 24 27 23 8 6 19
current output: 19 6 8 23 27 24 5
expected output: 5 6 8 19 23 24 27

【问题讨论】:

  • 张贴inputcurrent outputexpected output,每个都清楚地标明。我认为您的输入是5 24 27 23 8 6 19...?不过不确定...
  • 二分查找仅适用于已排序的数组,因为它依赖于项目的顺序来知道要搜索的一半...
  • 请注意,Java 的Array 类已经有一个docs.oracle.com/javase/7/docs/api/java/util/…, int)" title="Java's binary search">二进制搜索

标签: java sorting recursion binary-search


【解决方案1】:

为什么不直接使用Arrayssort方法?

    int myNumbers[] = {24,7,13,18,29};
    Arrays.sort(myNumbers);
    for(int i : myNumbers) {
        System.out.println(i);
    }

请参阅文档here

【讨论】:

  • 正要建议这个,然后计算机崩溃了。 :/ 这绝对是最简单的方法。
  • 这是一个项目的一部分,所以我需要在 insertInOrder 方法中实现我的 bSearch。