N-48.字符串排序

题目描述:

六级考试马上要来了,Jaanai在背单词备战六级的过程中,看到了单词本某一页上的n个长短不一的单词,背单词背累的她开始把玩这些单词:她把每个单词的字母打乱并按照字典序从小到大的顺序排列,随后单词与单词之间按照首字母字典序从大到小的顺序排列(注:字典序顺序与ASCII码一致)(如果两字符串的首字母相同,保留原来的次序,即稳定排序)。Jaanai想让你帮她用程序解决这个无聊的事情。

输入格式:

n行,每行一个仅由大小写字母组成的字符串。

输出格式:

n行,代表排序后的结果。


直接按部就班的做就行了。
首先对字符串内部排序,再对字符串排序即可
两次冒泡排序就行。

#include <stdio.h>  
#include <string.h>  
char s[11][55] = {0};  
char temp[55] = {0};  
int main () {  
    int cnt = 0;  
    while (scanf("%s", s[cnt + 1]) != EOF) cnt ++;  
    for (int i = 1; i <= cnt; i++) {
    	for (int j = 0; j < strlen(s[i]); j++) {
    		for (int k = 0; k < strlen(s[i]) - 1; k++) {
    			if (s[i][k] > s[i][k + 1]) {
    				char tmp = s[i][k];
    				s[i][k] = s[i][k + 1];
    				s[i][k + 1] = tmp;
				}
			}
		}
	} 
    for (int i = 1; i <= cnt; i++) {  
        for (int j = 1; j < cnt; j++) {  
            if (s[j][0] == s[j + 1][0]) continue;  
            if (strcmp(s[j], s[j + 1]) < 0) {  
                strcpy(temp, s[j + 1]);  
                strcpy(s[j + 1], s[j]);  
                strcpy(s[j], temp);  
            }  
        }  
    }  
    for (int i = 1; i <= cnt; i++) printf("%s\n", s[i]);  
    return 0;  
}  


posted @ 2022-05-18 16:18  misasteria  阅读(133)  评论(0编辑  收藏  举报