2014-02-26 138 views
0

我读与无序的数字清单:递归二进制搜索和排序

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 
+0

发布“输入”,“当前输出”和“预期输出”,每个标签都清晰地标注。我认为你的意见是'5 24 27 23 8 6 19'...?不知道... – MirroredFate

+0

一个二进制搜索只适用于排序后的数组,因为它依赖于项目的顺序来知道在哪一半搜索... – njzk2

+0

就像一个说明,Java的[数组](http:// docs.oracle.com/javase/7/docs/api/java/util/Arrays.html)类已经有一个binary search MirroredFate

回答

1

为什么不使用只使用Arrayssort方法?

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

查看文档here

+0

会提出这个建议,然后电脑崩溃。 :/ 这绝对是这样做的最简单的方法。 – MirroredFate

+0

它是一个项目的一部分,所以我需要在insertInOrder方法中实现我的bSearch。 – user3287300