思路:
先建立一个二维数组,大小是第一个输入的数字,里面要装的是输入单词的指针
再循环单词个数次,每次创建一个新的数组来装单词(这里其实用链表更节省空间一点)
再将单词指针赋给二维数组中对应的位置
再调用一下快排的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;
}