**7-4 英文单词排序**

分数 25

作者 张泳

单位 浙大城市学院

本题要求编写程序，输入若干英文单词，对这些单词按长度从小到大排序后输出。如果长度相同，按照输入的顺序不变。

### 输入格式：

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

### 输出格式：

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

### 输入样例：

```in
blue
red
yellow
green
purple
#
```

### 输出样例：

```out
red blue green yellow purple 
```

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB



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

typedef struct {
    char word[10 + 1];  
    int index; 
} Word;

int main() {
    Word words[20];
    int count = 0; //单词数量
    

    while (1) {
        char word[10 + 1];
        fgets(word, sizeof(word), stdin);
        

        if (word[0] == '#') {
            break;
        }


        word[strcspn(word, "\n")] = '\0';


        strcpy(words[count].word, word);
        words[count].index = count;
        count++;
    }

    //标准冒泡排序
    for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count-1-i; j++) {
            if (strlen(words[j].word) > strlen(words[j+1].word)) {
                // 交换单词
                Word temp = words[j];
                words[j] = words[j+1];
                words[j+1] = temp;
            }
        }
    }

    for (int i = 0; i < count; i++) {
        printf("%s ", words[i].word);
    }
    printf("\n");

    return 0;
}

```

