我开始研究数据结构和算法,并尝试实现冒泡排序:
def BubbleSort(list):
for a in range(len(list)):
for b in range(len(list)):# I could start this loop from 1
if list[a]< list[b]: # to avoid comparing the first element twice
temp=list[a]
list[a]=list[b]
list[b]=temp
return list
我浏览了网络和书籍 - 但没有找到泡泡排序的Python实现。 上面有什么问题?
答案 0 :(得分:3)
有几件事:
list
,dict
等的Python中使用变量BubbeSort 通过比较两个相邻的元素进行排序:所谓的&#34; bubble&#34;。如果检查左项是否确实小于正确项。如果不是这种情况,它会交换元素。该算法在列表上迭代最大 n 次,之后保证对其进行排序。
所以一个非常基本的实现是:
def BubbleSort(data):
for _ in range(len(data)): # iterate n times
for i in range(len(data)-1): # i is the left index of the bubble
if data[i+1] > data[i]: # if the left item is greater
# perform a swap
temp = data[i]
data[i] = data[i+1]
data[i+1] = temp
return data
现在我们可以通过停留在len(data)-1-j
来改进算法(大约让算法在一半的时间内工作),因为在每次迭代之后,气泡移动的最右边的元素保证是最大的:
def BubbleSort(data):
for j in range(len(data)): # iterate n times
for i in range(len(data)-1-j): # i is the left index of the bubble
if data[i+1] > data[i]: # if the left item is greater
# perform a swap
temp = data[i]
data[i] = data[i+1]
data[i+1] = temp
return data
但是使用bubblesort是 - 除了一些非常罕见的情况 - 效率低下。最好使用更快的算法,如 QuickSort , MergeSort 和 TimSort (Python的内置排序算法)。
答案 1 :(得分:0)
以下是实施bubble sort: