对于排序字符串的插入排序,我遇到strcpy正确更新temp,Ai和Aj的问题...
for (int j = 1; j < m; j++) {
int i = j - 1;
char temp[MAX_LEN]; //= arrayIn[j];
char Ai[MAX_LEN];
char Aj[MAX_LEN];
strcpy(temp,arrayIn[j]);
strcpy(Ai,arrayIn[i]);
strcpy(Aj,arrayIn[j]);
while (i >= 0 && strcmp (Ai, temp) < 0 /* Aj < Ai */) {
arrayIn[i+1] = arrayIn[i];
i = i - 1;
}
arrayIn[i+1] = temp;
}
示例输出:
输入:
array[0]: one
array[1]: two
array[2]: three
array[3]: four
array[4]: five
输出:
array[0]: five
array[1]: five
array[2]: one
array[3]: five
array[4]: five
期望的输出:
array[0]: five
array[1]: for
array[2]: one
array[3]: three
array[4]: two
答案 0 :(得分:0)
如果您打算使用strcpy
,则必须使用它:
for (int j = 1; j < m; j++) {
int i = j - 1;
char temp[MAX_LEN];
strcpy(temp, arrayIn[j]);
while (i >= 0 && strcmp (arrayIn[i], temp) < 0) {
strcpy(arrayIn[i+1], arrayIn[i]);
i = i - 1;
}
strcpy(arrayIn[i+1], temp);
}
如果你的数组是一个char数组的数组,就可以了。如果你有一个指向char的指针数组,你可以像使用整数那样编写带有赋值的排序:
for (int j = 1; j < m; j++) {
int i = j - 1;
char *temp;
temp = arrayIn[j];
while (i >= 0 && strcmp(arrayIn[i], temp) < 0) {
arrayIn[i+1] = arrayIn[i];
i = i - 1;
}
arrayIn[i+1] = temp;
}
但是,仍然必须使用strcmp
检查排序条件。请注意,在第二种情况下,指针可能指向常量不可变字符串。