首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择排序逻辑错误

选择排序逻辑错误
EN

Stack Overflow用户
提问于 2011-10-17 18:38:09
回答 1查看 168关注 0票数 0

我正在使用选择排序来对板球队的名字列表进行排序。

排序是在第一次重复一个名称3次之后进行的,这会从我正在排序的数组中删除另外两个名称。

来自数组的输入(按顺序):

克拉克,沃森,啤酒,科普兰,哈丁,休斯,赫西,约翰逊,哈瓦加,里昂,马什,帕丁森,庞汀,西德尔,华纳

排序数组后的输出:

啤酒,科普兰,哈丁,哈里斯,休斯,赫西,约翰逊,哈瓦加,里昂,马什,帕丁森,庞汀

代码:

代码语言:javascript
复制
void sort_names (Team_t player[]) {
    int pos;
    int min;
    int i, str_check;
    char *temp = NULL;

    for (pos = 0; pos < MAX_PLYR; pos++) {
        min = pos;

        for (i = (pos + 1); i < MAX_PLYR; i++) {
            str_check = strcmp(player[i].pname, player[min].pname);

            if (str_check < 0) {
                min = i;
            }

        }

        if (min != pos) {
            temp = player[pos].pname;
            strcpy(player[pos].pname, player[min].pname);
            strcpy(player[min].pname, temp);
        }
    }    
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-17 18:45:14

这段代码不会正确地交换条目:

代码语言:javascript
复制
temp = player[pos].pname;
strcpy(player[pos].pname, player[min].pname);
strcpy(player[min].pname, temp);

第一行将指向“pos”玩家名字的指针保存到temp,而不是名字本身。然后,第一个strcpy会覆盖它-它会丢失。(第二个strcpy只是将相同的字符串复制回原来的位置。)这就是为什么你会看到首先排序的项目不止一次地出现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7792529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档