以下代码是为了一个测试样例而给出的https://www.testdome.com/for-developers/solve-question/9621。
问题是: 实现函数sort_words,可以对包含英语字母小写字符的单词数组进行降序排序。
例如,数组{"cherry", "orange", "apple"}在排序后应变为{"orange", "cherry", "apple"}。
我的代码是:
问题是: 实现函数sort_words,可以对包含英语字母小写字符的单词数组进行降序排序。
例如,数组{"cherry", "orange", "apple"}在排序后应变为{"orange", "cherry", "apple"}。
我的代码是:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void sort_words(char *words[], int count)
{
char *x;
for (int i = 0; i<count; i++)
{
for (int j = i + 1; j<count; j++)
{
if ((char)(*words[i]) < (char)(*words[j]))
{
x = words[j];
words[j] = words[i];
words[i] = x;
}
}
}
}
#ifndef RunTests
int main()
{
char *words[] = { "cherry", "orange", "apple" };
sort_words(words, 3);
for (int i = 0; i < 3; i++)
{
printf("%s ", words[i]);
}
}
#endif
结果是正确的,但系统提示失败信息:“在字典上进行性能测试:超时限制”
为什么会出现这个错误,如何解决这个问题?谢谢!
apple
、apricot
、artichoke
、alfafa
按正确顺序排序。你的排序算法是二次方的 O(N ^ 2),而不是 O(N.logN)。这可能就是问题所在。如果字典中有 10,000 个单词,那么这大约相当于 1E8 和 1.5E5 的差异,即约为 125 倍的因数差异。 - Jonathan Lefflerchar
,这表明你不确定*words[i]
到底是什么。 - WhozCraigint cmp(const void *a, const void *b){ return strcmp(*(char**)b, *(char**)a); } void sort_words(char *words[], int count) { qsort(words, count, sizeof(*words), cmp); }
- BLUEPIXYqsort
的compare
函数接收char **
,因此无法直接使用。您的提案得出了错误的结果,而我的提案得出了正确的结果。 - BLUEPIXY