java - 制作二分查找函数

标签 java sorting binary-search insertion-sort

我正在做一项家庭作业,我应该创建一个执行二进制插入排序的函数,但我的函数似乎无法正常工作。

这里我尝试将二分查找函数与插入排序函数结合起来(作业任务中指定需要采用函数的形式:insertionSort(int[] array, int lo, int hi ))

 public static void insertionSort(int[] array, int lo, int hi){
        int mid; 
        int pos; 

        for (int i = 1; i < array.length; i++) {

            int x= array[i]; 

            while (lo < hi) {
                mid = lo + (hi -lo)/2;
                if (x == array[mid]) {
                    pos = mid; 
                }
                if (x > array[mid]) {
                    lo = mid+1; 
                }
                else if (x < array[mid]) {
                    hi = mid-1; 
                }
            }
            pos = lo; 

                for (int j = i; j > pos; j--) {
                array[j] = array[j-1]; 
            }
            array[pos] = x; 
        }
    }

如果我尝试使用列表 {2,5,1,8,3} 运行它,输出将为

2 5 1 3 1(如果 lo < hi 并且如果 lo > hi)

2 5 3 8 5(如果 lo==hi)

不过,我期待的是一个排序列表...... 知道我做错了什么吗?

最佳答案

只是为了给您一个可能的想法:

public static void insertionSort(int[] array) {
    if (array.length <= 1) {
        return;
    }

    // Start with an initially sorted part.
    int loSorted = array.length - 1;
    //int hiSorted = array.length;

    while (loSorted > 0) {

        // Take one from the array
        int x = array[0];

        // Where in the sorted part to insert?
        int insertI = insertPosition(array, loSorted);

        // Insert x at insertI
        ...
        --loSorted;
    }
}

关于java - 制作二分查找函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58007971/

相关文章:

java - 二维数组上的二进制搜索

c - 二进制搜索,strcmp C 中的两个动态字符串数组

Java 重绘单个图像

java - 如何将接口(interface)的方法生成到所有实现类中?

python str.replace 没有获取参数

bash - 按任何字段中的最高值排序

java - 使用了哪些组件和技术来创建 Bitdefender 的 GUI?

java - 退出的主线程会杀死异步任务吗?

algorithm - 如何使用基于快速排序的算法创建一个 k 排序数组

java - 二进制搜索二维数组 - Java