思路1:將字符串看作二十六進(jìn)制的數(shù)字,然后對數(shù)字進(jìn)行排序
思路2:線性排序
NND,最后發(fā)現(xiàn)C語言用strcmp然后就可以用常用的判別法進(jìn)行
def char_to_value(char):
if char == ' ':
return 0
return ord(char) - ord('a') + 1
def str_to_value(str,align_len):
value = 0
for i in range(align_len):
value = value*26 + char_to_value(str[i])
return value
# 將字符串看作26進(jìn)制的數(shù)字
def str_order(strs,align_len):
values = []
for str in strs:
if len(str)<align_len:
str += ' '*(align_len-len(str))
values.append(str_to_value(str,align_len))
select_sort(values,strs)
def select_sort(values,strs):
for i in range(len(values)):
min = i
for j in range(min+1,len(values)):
if values[min] > values[j]:
min = j
if min!=i:
values[min],values[i] = values[i],values[min]
strs[min], strs[i] = strs[i], strs[min]
def main():
strs = ['abcde','bcda','abcda']
str_order(strs,5)
print(strs)
if __name__ == '__main__':
main()
思路2:
# 因?yàn)榭崭竦腶scii小于‘a(chǎn)’,不用特殊處理
def order_by_specific_char(strs,char_index):
length = len(strs)
for i in range(length):
min = i
for j in range(min+1,length):
# 兩個對應(yīng)字符都為空
if len(strs[min]) <= char_index:
pass
# 只有min對應(yīng)字符為空
elif len(strs[j]) <= char_index:
min = j
elif ord(strs[min][char_index]) > ord(strs[j][char_index]):
min = j
if min!=i:
strs[min],strs[i] = strs[i],strs[min]
def str_order2(strs,align_len):
for i in range(align_len):
# 后面的字符開始
i = align_len - i - 1
print(i)
order_by_specific_char(strs,i)
def main():
strs = ['abcde','abcdf','abcda']
str_order2(strs,5)
print(strs)
if __name__ == '__main__':
main()