思路1:将字符串看作二十六进制的数字,然后对数字进行排序
思路2:线性排序
NND,最后发现C语言用strcmp然后就可以用常用的判别法进行
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进制的数字
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:
# 因为空格的ascii小于‘a’,不用特殊处理
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):
# 两个对应字符都为空
if len(strs[min]) <= char_index:
pass
# 只有min对应字符为空
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()