c ++员工姓名搜索

时间:2018-03-22 18:52:46

标签: c++ c++11 search binary-search

        string name[size] = {"Collins, Bill", "Smith, Bart", "Michalski, Joe", "Griffin, Jim",
                "Sanchez, Manny", "Rubin, Sarah", "Taylor, Tyrone", "Johnson, Jill",
                "Allison, Jeff", "Moreno, Juan", "Wolfe, Bill", "Whitman, Jean",
                "Moretti, Bella", "Wu, Hong", "Patel, Renee", "Harrison, Rose",
                "Smith, Cathy", "Conroy, Pat", "Kelly, Sean", "Holland, Beth"};



    int binarySearchIterative(string name[], int size, string empName) {
        int low = 0;
        int high = size - 1;

        while (low <= high) {
            int mid = (low + high) / 2;
            if (empName == name[mid]) {
                return mid;
            } else if (empName < name[mid]) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        return -1;
    }

因此,当我输入要搜索的名称时,我必须完全按照数组中列出的方式键入它。例如,如果我想找到比尔柯林斯。我必须输入它作为柯林斯,比尔。如果我输入比尔柯林斯,它会告诉我员工没有找到。我需要能够搜索名字First Last,而且不使用逗号。如果您需要查看更多我的代码,请告诉我。

2 个答案:

答案 0 :(得分:2)

二进制搜索需要排序输入,您可以使用铅笔测试轻松检查:

假设您有一系列数字,例如1,5,8,10,12,并且您正在寻找5;首先猜测,你拆分系列并测试中间的数字,即8。由于5低于8,很明显您不必在5之上的一半中查找8。然而,只有系列被排序,这种假设才有效;否则5也可能在上半部分。

然后对您的输入进行排序,然后查看它是否有效。否则使用调试器: - )

答案 1 :(得分:0)

您需要实现一个比较函数(或代码),从字符串中提取名字和姓氏(作为单独的变量)。

提取后,您可以轻松地按名字或姓氏进行比较。

理想情况下,您应该有一个对数据建模的结构,例如:名字字段和姓氏字段。