字符串排序

思路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) 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()

你可能感兴趣的:(字符串排序)