思路:

先建立一个二维数组,大小是第一个输入的数字,里面要装的是输入单词的指针

再循环单词个数次,每次创建一个新的数组来装单词(这里其实用链表更节省空间一点)

再将单词指针赋给二维数组中对应的位置

再调用一下快排的API(自己之前在体重写过相应算法,但是结果惨不忍睹,所以直接调用API了)

其中第一个是待排的指针,第二个是有多少个元素,第三个是数组中每个元素的大小(这里的two装的就是指针,所以是char*),第四个是需要自己构造的比较数组中两个元素的大小,如果结果返回大于1,则是顺序排列,小于1则是逆序排列,等于一就不确定(因为快排是不稳定排序)

在之后顺序输出即可

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int cmp(const char** a, const char** b) {

return strcmp((char*)*a, (char*)*b);

} int main() {

int number;
scanf("%d", &number);
char** two = (char**)malloc(sizeof(char*) * number);
memset(two, 0, sizeof(number) * number);
for (int i = 0; i < number; i++) {
    char* one = (char*)malloc(sizeof(char) * 101);
    scanf("%s", one);
    two[i] = one;
}
qsort(two, number, sizeof(char*), cmp);
for (int i = 0; i < number; i++) {
    printf("%s\n", two[i]);
}
return 0;

}