题解 | 华为HJ14#字符串排序#
字符串排序
https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
描述
给定 n 个字符串,请对 n 个字符串按照字典序排列。
数据范围: 1 \le n \le 1000 \1≤n≤1000 ,字符串长度满足 1 \le len \le 100 \1≤len≤100
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。
示例1
输入:
9 cap to cat card two too up boat boot复制
输出:
boat boot cap card cat to too two up代码:
#include <stdio.h> #include<stdlib.h> #include <string.h> //以下是Senky的代码: int cmp(const char** p1, const char** p2) { return strcmp(*p1, *p2);//升序排列即字典顺序 } int main() { int n; scanf("%d\n", &n);//手动输入字符串个数 char* b; char** a; int i = 0; a = (char**)malloc(n * sizeof(char*));//这里有指向(n个char*)的指针a for (i = 0; i < n; i++) { b = (char*)malloc(101 * sizeof(char));//这里有指向(大小为100个char)的指针b gets(b);//获取一行字符串 a[i] = b;//将字符串的指针存在a中 } qsort(a, n, sizeof(char*), cmp);//快速排序 for (i = 0; i < n; i++) { printf("%s\n", a[i]);//输出字符串 } for (i = 0; i < n; i++) { free(a[i]);//释放malloc来的a } return 0;//编辑于2022/09/09 }
图解:
①灵活使用指针和二级指针,可以极大的减小运算内存,穷举也能做但是不够完美;
②注意for循环中malloc的内存free方式;
③当前帖子仅供自我精进、学习使用
华为-HJ 文章被收录于专栏
机试的题解