python,插入排序,字符串

2024-04-19 17:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在不使用内置sort()的情况下对该列表进行排序。 我想我可以使用插入排序,但我从来没有真正使用过它。 我的代码似乎不起作用。怎么了? 谢谢您。在

fruits = ['grape', 'banana', 'strawberry', 'apple', 'peach', 'cherry']



for i in range(1, len(fruits)):
    tmp = fruits[i]
    j = i-1;
    while (j>0 and fruits[j] > tmp):
        fruits[j+1] = fruits[j]
        j = j-1
        fruits[j+1] = tmp
print(fruits)

Tags: 代码apple列表for排序情况sort内置
3条回答

我改变了两件事,它起作用了。不完全是为了回答,但可能会帮助你前进。在

fruits = ['grape', 'banana', 'strawberry', 'apple', 'peach', 'cherry']

for i in range(0, len(fruits)):
    tmp = fruits[i]
    j = i-1;
    print(fruits)
    while (j>-1 and fruits[j] > tmp):
        fruits[j+1] = fruits[j] 
        j = j-1
        fruits[j+1] = tmp

print(fruits)

可以这样缩小:

^{pr2}$

退货:

['apple', 'banana', 'cherry', 'grape', 'peach', 'strawberry']

内部循环中出现的交换操作似乎很奇怪。如果我是个下注的人,我会说这就是出错的地方。在

试着做一个干净的“交换”,就像你对三个变量所做的那样:

a = 10
b = 20
tmp = a
a = b
b = tmp
print(a) # prints 20
print(b) # prints 10

你的代码将变成:

^{pr2}$

首先用len()替换lens()。在

另一方面,您不能将函数应用于水果数组,而只能声明函数。在

最后,数组从索引0开始,因此j必须大于等于0。在

更正代码:

fruits = ['grape', 'banana', 'strawberry', 'apple', 'peach', 'cherry']

def insertion_sort(fruits):

   for i in range(1, len(fruits)):
       tmp = fruits[i]
       j = i-1;
       while (j>=0 and fruits[j] > tmp):
           fruits[j+1] = fruits[j];
           j = j-1;
      fruits[j+1] = tmp;
   return fruits

if __name__ == "__main__":

     fruits2 = insertion_sort(fruits)
     print(fruits2)

相关问题 更多 >