我是 CompSci 1 的 10 年级学生。在我们的教科书Practical Programming 3rd Edition, An Introduction to Computer Science Using Python 3.6中,它提到了荷兰国旗问题。以下是它如何逐字说明练习:
Edsgar Dijkstra 以其在编程语言方面的工作而闻名。他提出了一个巧妙的问题,他称之为荷兰国旗问题:给定一个字符串列表,每个字符串要么是“red”、“green”或“blue”(每个在列表中表示多次),重新排列列表,使字符串按照荷兰国旗的顺序排列——首先是所有“红色”字符串,然后是所有“绿色”字符串,然后是所有“蓝色”字符串。
这是我为练习编写的 python 代码:
def dutch_flag(colors: list)-> list:
"""
This function takes a list of strings of colors (red, green,
or blue),and returns a list containing them with the reds first,
the greens second, and the blues last.
"""
reds = 0
greens = 0
blues = 0
for color in colors:
color = color.lower().strip()
if color == "red":
reds += 1
elif color == "green":
greens += 1
elif color == "blue":
blues += 1
flag = []
for i in range(0, reds):
flag.append("red")
for i in range(0, greens):
flag.append("green")
for i in range(0, blues):
flag.append("blue")
return flag
我的代码在 O(n) 时间内运行。但是,我的老师告诉我们,这个程序需要一个排序算法,充其量是 O(n*logn)。为什么我的代码更快?