选择排序逻辑错误

时间:2011-10-17 10:38:09

标签: c arrays string logic selection

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

排序首先重复3次名称,从我正在排序的数组中删除另外两个名称。

从数组输入(按顺序):

Clarke Watson Beer Copeland Haddin Harris Hughes Hussey Johnson Khawaja Lyon Marsh Pattinson Ponting Siddle Warner

排序数组后的输出:

啤酒啤酒啤酒谷歌Haddin Harris Hughes Hussey Johnson Khawaja Lyon Marsh Pattinson Ponting

代码:

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

1 个答案:

答案 0 :(得分:2)

您的代码中的这一部分不会正确交换条目:

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

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