Insertion排序的Python代码将输入作为字符串值

时间:2017-11-09 12:33:45

标签: python python-2.7

此Python代码根据字符串元素提供已排序的元素 我们如何转换列表元素,它们是整数类型的字符串格式?

这是我的代码:

def insertionSort(arr, n):
for i in range(1, n):
    key = arr[i]
    j = i - 1
    while j >= 0 and arr[j] > key:
        arr[j+1] = arr[j]
        j = j - 1
    arr[j+1] = key
print '\nSorted elements: ',    
return (' ').join(arr)

arr = (raw_input("enter elements: ")).split(',')  
print insertionSort(arr, len(arr))

1 个答案:

答案 0 :(得分:2)

您必须使用元素将元素转换为键函数,这样您就可以使用元素本身的比较,而不是比较符合您需求的转换数据。

我会这样做作为通用解决方案:

def insertionSort(arr, n, keyfunc=lambda x:x):
    for i in range(1, n):
        key = arr[i]
        j = i - 1
        while j >= 0 and keyfunc(arr[j]) > keyfunc(key):
            arr[j+1] = arr[j]
            j = j - 1
        arr[j+1] = key
    return ' '.join(arr)

所以默认情况下,键只是元素本身,但如果你像这样调用你的函数:

insertionSort(arr, len(arr), keyfunc=int)

键功能现在是“转换为整数”,并且排序在整数列表中按预期工作为字符串。

(请注意,通过允许提供sort函数,内置key方法可以这样工作。

当然,您可以放弃整个keyfunc想法,只需在此处硬编码int

while j >= 0 and int(arr[j]) > int(key):