插入排序使用二进制搜索

时间:2014-09-14 00:17:05

标签: java arrays sorting binary-search insertion-sort

我无法找到插入排序的错误。我需要在我的排序中实现二进制搜索,它将无法正常工作。

public  void insertionSort(String[] data){
    for (int i=1; i<data.length; i++){
        String item = data[i];
        int move = binarySearch(data, item, 0, i - 1);
        for (int j = i; j < move; j++){
            data[j] = data[j-1];
        }
        data[move]= item;
    }
}

public int binarySearch(String[] data, String item, int low, int high) {
    int mid;
    while(low<=high){
        mid=(low+high)/2;
        if(item.compareTo(data[mid]) > 0)
            low=mid+1;
        else if(item.compareTo(data[mid]) < 0)
            high=mid-1;
        else
            return mid;
    }
    return low;
}

2 个答案:

答案 0 :(得分:3)

您的插入循环错误。由于move始终介于0和i之间(包括),因此循环将从j >= move开始,因此您需要递减j,而不是递增它:

for (int j = i; j > move; j--){
    data[j] = data[j-1];
}

答案 1 :(得分:0)

好吧,首先,将二进制搜索合并到插入排序中似乎没什么用处。二进制搜索只会找到您的密钥在数据数组中的位置。对于data [i],插入排序将在第i个索引之前找到它所属的位置。

在用于插入排序的for循环中,您应该递减j而不是递增。