首页 > 试题广场 >

以下代码功能:找出一个有序(字典序)字符串数组arr种值等于

[问答题]
以下代码功能:找出一个有序(字典序)字符串数组arr中值等于字符串v的元素的符号,如果有多个元素满足这个条件,则返回其中序号最大的。请找出下面代码中所有错误,直接在代码右侧空白处修改
Int bisearch(char**arr, int b, int e, char*v){
    Int minIndex = b, maxIndex = e, midIndex;
    while(minIndex<maxindex){
        midIndex=(minIndex+maxIndex)/2;
        if(strcmp(arr[midIndx],v<=0)){
            minIndex = midIndex;
        }else{
            maxIndex=minIndex;
        }
   }
       
    if(!strcmp(arr[maxIndex],v)){
        return maxIndex;
    }else{
        return -1;
    }
} 

本题目解体思路:
本题目主要考察二分查找(折半查找)
public class BinarySearch {
/***
* 二分查找(折半查找) 找出一个有序(字典序)字符串数组arr中值等于字符串v的元素的符号,如果有多个元素满足这个条件,则返回其中索引最大的。
* @param args
*/
public static int binarySearch(char[] arr, int begin, int end, char v) {
int tmp = -1;
if (begin < end) {
int mid = (begin + end) / 2;
if (arr[mid] < v)
begin = mid + 1;
else if (arr[mid] > v)
end = mid - 1;
else {
tmp = mid;
begin = mid + 1;
}
}
return tmp;
}

public static void main(String[] args) {
String str = "abcddedg";
char[] arr = str.toCharArray();
int index = binarySearch(arr, 0, arr.length, 'd');
System.out.println(index);
}

}

发表于 2016-01-15 13:44:19 回复(0)
int BinarySearch(char **ar,int begin,int end,char *v)
{
    int result=-1;
    while(begin <= end)
    {
        int mid=begin+(end-begin)/2;
        if(strcmp(ar[mid],v) > 0)
            end=mid-1;
        else if(strcmp(ar[mid],v) < 0)
            begin=mid+1;
        else
        {
            if(result < mid)
                result=mid;
            begin=mid+1;
        }
    }
    return result;
}
发表于 2015-06-24 15:51:36 回复(0)