c - 选择排序逻辑错误

标签 c arrays string logic selection

我正在使用选择排序对板球队的名单进行排序。

首先重复一个名称 3 次后,排序就会起作用,这会从我正在排序的数组中消除其他两个名称。

从数组输入(按顺序):

克拉克·沃森·比尔·科普兰·哈丁·哈里斯·休斯·赫西·约翰逊·卡瓦贾·里昂·马什·帕丁森·庞廷·西德尔·华纳

数组排序后的输出:

啤酒啤酒啤酒科普兰哈丁哈里斯休斯赫西约翰逊卡瓦贾里昂马什帕丁森庞廷

代码:

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);
        }
    }    
}

最佳答案

您的这部分代码将无法正确交换条目:

temp = player[pos].pname;
strcpy(player[pos].pname, player[min].pname);
strcpy(player[min].pname, temp);

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

关于c - 选择排序逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7792529/

相关文章:

c - 修改函数中的数组后输出错误(在 C 中)

c - 如何使用 flex/bison 解析 C 字符串 (char *)?

c - 未定义行为的不同分类是什么意思?

javascript - struts2迭代器值到javascript数组

php - 从字符串中删除注册、商标和版权符号的最佳方法是什么?

c - 如何在 C 中为枚举赋值?

mysql - JSON_提取错误 : Invalid JSON text in argument 1 to function json_extract: "Missing a name for object member."

c - 将特定的数组元素组合在一起 C

java - 不使用 split 功能分离成列

ios - 如何在 float 中添加逗号