首页 > 试题广场 >

字符串排序

[编程题]字符串排序
  • 热度指数:568955 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的由大小写字母混合构成的 n 个单词,输出按字典序从小到大排序后的结果。

【名词解释】
\hspace{15pt}从字符串的第一个字符开始逐个比较,直至发现第一个不同的位置,比较这个位置字符的 Ascii 码,Ascii 码较小(\texttt{`A'} \lt \texttt{`B'} \cdots \lt \texttt{`Z'} \lt \texttt{`a'} \lt \cdots \lt \texttt{`z'})的字符串字典序也较小。

输入描述:
\hspace{15pt}第一行输入一个整数 n \left( 1 \leqq n \leqq 10^3 \right) 代表给定的单词个数。
\hspace{15pt}此后 n 行,每行输入一个长度 1 \leqq {\rm length}(s) \leqq 100,由大小写字母构成的字符串 s,代表一个单词。


输出描述:
\hspace{15pt}一共 n 行,每行输出一个字符串,代表排序后的结果。第一行输出字典序最小的单词。
示例1

输入

11
cap
to
cat
card
two
too
up
boat
boot
AA
Aa

输出

AA
Aa
boat
boot
cap
card
cat
to
too
two
up
n = int(input())
c =[]
for i in range(n):
    c.append(input())
c = sorted(c)
for j in c:
    print(j)
发表于 2025-06-21 16:15:06 回复(0)
n = int(input())  # 单词个数
word_list = []

for i in range(n):
    word_list.append(input())

print('\n'.join(sorted(word_list)))

发表于 2025-06-19 21:19:15 回复(0)
萌新求教,看了大佬们的解法,想了解一下,第一行输入的整数,在最后的结果是哪一步被去掉了呢
发表于 2025-05-25 18:47:43 回复(2)
words = []

for _ in range(int(input())):
    words.append(input())

words.sort()

print("\n".join(words))
发表于 2025-05-09 17:18:11 回复(0)
import sys

n = int(input())
output = []
for i in range(n):
    output.append(input())
output.sort()
for i in range(n):
    print(output[i])
发表于 2025-04-09 22:01:22 回复(0)
n = int(input())

ls = []
for i in range(n):
    ls.append(input())

d = {}
for i in ls:
    d[i] = []
    for j in i:
        d[i].append(ord(j))

for i in range(n):
    for j in range(n-i-1):
        asc_j = d[ls[j]]
        asc_j1 = d[ls[j+1]]
        min_len = min(len(asc_j), len(asc_j1))
        res = 0
        for h in range(min_len):
            if asc_j[h] != asc_j1[h]:
                res = asc_j[h] - asc_j1[h]
                break
        if res == 0:
            res = len(asc_j) - len(asc_j1)

        if res > 0:
            ls[j], ls[j+1] = ls[j+1], ls[j]

for w in ls:
    print(w)

发表于 2025-04-07 11:23:32 回复(0)
n=int(input());mm=[]
for i in range(n):
    mm.append(input())
mm=sorted(mm)
for i in range(n):
    print(mm[i])

发表于 2025-03-24 21:11:55 回复(0)
n=int(input())
i=0
l=[]
while i<n:
    l.append(input())
    i+=1
for j in sorted(l):
    print(j)
发表于 2025-03-05 16:40:19 回复(0)
一开始不知道可以sort字符串,写了半年去,我说简单题怎么我写那么多
from re import I
import sys

record = []
data_dic = {}
for line in sys.stdin:
    record.append(line.strip())
try:
    n = record[0]
    data = record[1:]
    max_len = 0
    for i in data:
        if len(i)>max_len:
            max_len = len(i)
    max_len = 3*max_len
    for i in data:
        num = 0
        count = 0
        for j in i:
            num += ord(j)*(10**(max_len-count))
            count +=3
        data_dic[i] = num
    res_dic = dict(sorted(data_dic.items(),key = lambda item:item[1],reverse = True))
    for k in range(len(res_dic)):
        print(res_dic.popitem()[0])
except:
    None


发表于 2025-02-19 18:21:29 回复(0)
n = eval(input())
ls = []
for i in range(n):
    ls.append(input())
for j in sorted(ls):
    print(j)

发表于 2025-02-19 11:36:29 回复(0)
n = input()
s = []
for i in range(int(n)):
    s.append(input().strip())
s.sort()
for i in s:
    print(i)
发表于 2025-02-16 12:54:32 回复(0)
print(*sorted([input() for _ in range(int(input()))]), sep='\n')
发表于 2025-01-14 16:15:35 回复(0)
"""
————————————————
【描述】
对于给定的由大小写字母混合构成的 n 个单词,输出按 “字典序” 从小到大排序后的结果。
从字符串的第一个字符开始逐个比较,直到找到第一个不同的位置,通过比较这个位置字符对应的 Ascii 码,得出字符串的大小,称为字典序比较。
【输入描述】
第一行输入一个整数 n(1≦n≦1000) 代表给定的单词个数。
此后 n 行,每行输入一个长度 1≦length(s)≦100 ,由大小写字母混合构成的字符串 s ,代表一个单词。
【输出描述】
输出 n 行,每行输出一个字符串,代表排序后的结果。第一行输出字典序最小的单词。
————————————————
"""

# 单词比较方法
def sort_word_by_alphabet(word_a, word_b):
    i = 0
    max_len = max(len(word_a), len(word_b))
    for i in range(0, max_len):
        alphabet_a = word_a[i] if i < len(word_a) else "0"
        alphabet_b = word_b[i] if i < len(word_b) else "0"
        if alphabet_a > alphabet_b:
            return 1
        elif alphabet_a < alphabet_b:
            return -1
    return 0

# 单词列表排序
def sort_word_list(word_list):
    if len(word_list) <= 1:
        return word_list
    else:
        reference_word = word_list[0]
        del word_list[0]
        list_left = []
        list_right = []
        for word in word_list:
            sort_result = sort_word_by_alphabet(word, reference_word)
            if sort_result >= 0:
                list_right.append(word)
            elif sort_result < 0:
                list_left.append(word)
        return sort_word_list(list_left) + [reference_word] + sort_word_list(list_right)

# 主函数
def main():
    word_list = []
    word_list_len = int(input())
    for i in range(0, word_list_len):
        word = input()
        word_list.append(word)
    sorted_word_list = sort_word_list(word_list)

    for word in sorted_word_list:
        print(word)

main()


发表于 2025-01-05 20:29:36 回复(0)
n = int(input())
li = []
for i in range(n) :
    li.append(input())
li.sort()
for i in li:
    print(i)

发表于 2024-12-23 12:14:59 回复(0)
n = int(input())
lis = []
for i in range(n):
    lis.append(input())
lis = sorted(lis)
for i in lis:
    print(i)
发表于 2024-11-24 13:00:07 回复(0)
num = int(input())
list_0 = []
for _ in range(num):
    list_0.append(input())
list_0.sort()
for item in list_0:
    print(item)

发表于 2024-10-31 21:24:38 回复(0)
word_list = [input() for i in range(int(input()))]
for word in sorted(word_list):
    print(word)

发表于 2024-10-31 16:50:55 回复(0)
n=int(input())
strings=[input() for _ in range(n)]
for string in sorted(strings):
    print(string)

发表于 2024-10-31 11:56:33 回复(0)
N = int(input())
lst=[]
for i in range(N):
    word=input()
    lst.append(word)
list = sorted(lst)
for i in list:
    print(i)

发表于 2024-10-24 15:12:52 回复(0)
a=int(input())
lis=[]
for i in range(a):
    lis.append(input())
lis.sort()
print('\n'.join(lis))
发表于 2024-09-17 18:12:37 回复(0)