0

学生のリストがあり、姓で並べ替えたいと思います。学生リストは次のようになります。

Amanda
Dorris
Tucker
Yasmin
Zara

二分探索法を使用してこれらの学生を検索し、目的の結果を出力したいと思います。

これは私がこれまでに持っているものです:

public void binarySearch(String keyword) {

    int output;

    if (fileSorted == false) {
        System.out.println("The file " + fileName + " is not sorted. Please wait while it gets sorted...");
        bubbleSort();
        System.out.println("Thank you for your patience.");
        System.out.println();
        System.out.print("Search for: ");
        keyword = elmo.nextLine();
        output = doBinarySearch(keyword);
    } else {
        output = doBinarySearch(keyword);
    }
    System.out.println(output);
}

public int doBinarySearch(String keyword) {

    int start = 0;
    int end = numStudents - 1;
    int mid;
    int result;

    while (start < end) {
        mid = start + (end - start) / 2;
        result = students[mid].returnLastName().compareToIgnoreCase(keyword);

        if (result == 0) {
            return mid;
        } else if ((end - start) <= 1 ) {
            return -1;
        } else if (result > 0) {
            start = mid;
        } else if (result < 0) {
            end = mid;
        }
    }
    return -1;
}
4

2 に答える 2

0

ループ条件で不等式を使用する代わりに -- while (start != end)-- を使用してくださいwhile (start < end)これが典型的なアプローチです。等しいかどうかをテストするときは、反復ごとに と が 1 だけ変化するという仮定を立てますが、startこれendは必ずしも正しいとは限りません。

于 2013-06-15T23:21:12.770 に答える