Bootstrap

单词排序(23.12-24)_题解

【题解提供者】吴立强

解法一

思路

本题就是单纯的模拟,考验代码能力。

代码

#include<iostream>
#include<set>
using namespace std;

int main() {
	/// set 容器,可以排序和去重
	set<string> se;
	/// string 容器,可以更方便的读入,可配合其它容器使用
	string s;
	/// 读到文件末尾为止(读到空格自动分割)
	while(cin >> s) se.insert(s);
	/// for 循环遍历容器的写法
	for(string f: se) cout << f << ' ';
	return 0;
}

也展示一下 C 语言的写法

#include<stdio.h>

char s[100][51];

int cmp(char a[], char b[]) {  /// 同 strcmp 的功能
	for(int i = 0; ; i ++) {
		if(a[i] == b[i]) {
			if(a[i] == '\0') break;
			continue;
		}
		return a[i] - b[i];
	}
	return 0;
}
void cpy(char a[], char b[]) {  /// 同 strcpy 的功能
	int i = 0;
	do {
		a[i] = b[i];
		i ++;
	} while(b[i - 1] != '\0');
}
int main() {
	int n = 0;
	/// 读入数据到文件末尾
	while(scanf("%s", s[n]) != EOF) n ++;
	/// 冒泡排序,可以用 qsort 替代
	for(int i = 1; i < n; i ++) {
		for(int j = 0; j < n - i; j ++) {
			if(cmp(s[j], s[j + 1]) > 0) {
				char t[51];
				cpy(t, s[j]);
				cpy(s[j], s[j + 1]);
				cpy(s[j + 1], t);
			}
		}
	}
	printf("%s", s[0]);
	for(int i = 1; i < n; i ++)
		if(cmp(s[i], s[i - 1]) != 0)
			printf("\n%s", s[i]);
	return 0;
}

算法分析

本算法的时间复杂度为输入字符的数量

;