递归二进制搜索和排序

时间:2014-02-26 23:24:52

标签: java sorting recursion binary-search

我正在阅读未列出数字的列表:

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

2 个答案:

答案 0 :(得分:1)

为什么不使用Arrayssort方法?

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

请参阅文档here

答案 1 :(得分:0)

您可以使用arrays.sort()方法。例如,

let sum = arr.reduce(0) { $1 ? $0 + 1 : $0 }

输出:

import java.util.Arrays;

public class JavaSort 
{
   public static void main(String[] args) 
   {        
      int arrNum[] = {5, 24, 27, 23, 8, 6, 19};

      Arrays.sort(arrNum); // arrays.sort method by default sorts in ascending order

      System.out.printf("Sorted array java : %s", Arrays.toString(arrNum));
   }
}

有关排序的更多信息,请参见this资源。