排序算法没有

2024-04-20 10:23:22 发布

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

我正在努力提高自己的技能,我想我会尝试编写自己的小排序算法:

import random
from random import randint

int_list = []
for i in range(10):     #Creates a 10-entry list of randon ints
    int_list.append(random.randint(0,10))
print "Unsorted list:\t" + str(int_list)

def sorter(int_list):
    for i in range(len(int_list)-1):
        while int_list[i] > int_list[i+1]:
            temp = int_list[i]
            int_list[i] = int_list[i+1]
            int_list[i+1] = temp
            continue
        return int_list

print "\"Sorted\" list:\t" + str(sorter(int_list))

当我运行这个脚本时,它只对列表的前两个条目进行排序。我对continue的理解是,当while语句是True时,它会在while循环中不断循环。你知道吗


Tags: inimportfor排序rangerandomtemplist
2条回答

你的while实际上像if一样运行,看起来你在试图bubble-sort而你没有正确地实现它(你应该一直迭代,直到迭代没有执行一次交换为止)-这就是为什么你没有真正排序。你知道吗

第二,python的“交换”方式不是:

temp = int_list[i]
int_list[i] = int_list[i+1]
int_list[i+1] = temp

而是:

int_list[i], int_list[i+1] = int_list[i+1], int_list[i]

你的return int_list语句缩进太远了-它在for循环中,因此你的函数在第一次迭代结束时退出。你知道吗

还有

int_list = []
for i in range(10):     #Creates a 10-entry list of randon ints
    int_list.append(random.randint(0,10))

可以减少到

int_list = [random.randint(0, 10) for i in range(10)]

while只会运行0或1次(您可以使用if)。你知道吗

另外,看起来您只是在执行冒泡排序的第一次传递-它会将最高值移到列表的末尾,但不会产生完全排序的列表。您需要另一个for循环来重复执行此操作(“冒泡”值)。你知道吗

相关问题 更多 >