下面这个程序为什么会运行超时啊

下面这个程序为什么会运行超时啊?真的很绝望。
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:

#include
#include
#include
int main()
{
 char color[20][11];
 int index=0;
 char *tmp;
 scanf("%s",color[index]);
 index++;
 while(color[index]!="#")
 {
     scanf("%s",color[index]);
     index++;
 }
   index--;
  for(int j=0;j-1;j++)
  {
      for(int k=j+1;k-1;k++)
      {
          if(strcmp(color[j],color[k])>0)
          {
              strcpy(tmp,color[j]);
              strcpy(color[j],color[k]);
              strcpy(color[k],tmp);
           }
          }
      printf("%s ",color[j]);
  }
  return 0;
}

输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。

如果你是超时的话那么说明此题时间复杂度为O(n),所以你可以想办法把双循环改成单循环

数据范围捏?n方只能过1e4下的

在你的代码上修改的,仅供参考

img

#include <stdio.h>
#include <string.h>

int main(void)
{
    char color[20][11];
    int index = 0;
    char tmp[11];//这里不能用指针

    scanf("%s", color[index]);
    index++;
    while (strcmp(color[index - 1], "#") && index < 20)/*这里被修改了*/
    {
        scanf("%s", color[index]);
        index++;
    }
    index--;
    /*判断是输入#终止的还是输入了20个单词终止的*/
    int n = color[index][0] == '#' ? index - 1 : index;
    for (int j = 0; j < n; j++)
    {
        for (int k = 0; k < n - j; k++)
        {
            if (strlen(color[k]) > strlen(color[k + 1]))
            {/*是比较长度不是比较大小*/

                strcpy(tmp, color[k]);
                strcpy(color[k], color[k + 1]);
                strcpy(color[k + 1], tmp);
            }
        }
    }
    for (int j = 0; j <= n; j++)
        printf("%s ", color[j]);
    return 0;
}