[英]Bubble sort with optimization in Python
我是Python的新手,我從排序算法,PEP8和Python的Zen開始了我的旅程。 我剛剛在CodeReview上寫了一篇文章。 我進行了修復,我想問一下優化氣泡排序:第二個選項 。 我實現了優化氣泡排序的第一個選項,但是第二個選項卻有問題。 在Wikipedia中,它“使我們可以跳過很多元素,在最壞的情況下,可以使比較計數提高50%”。 因此,我的第一個選項代碼如下所示:
def bubble_sort(container):
"""
Bubble sort with optimization.
Description
----------
Performance cases:
Worst : O(n^2)
Average : O(n^2)
Best case : O(n)
Parameters
----------
data_container : Mutable structure with comparable objects and structure
which has implemented __len__, __getitem__ and __setitem__.
Returns
-------
None
Examples
----------
>>> bubble_sort([7,1,2,6,4,2,3])
[1, 2, 2, 3, 4, 6, 7]
>>> bubble_sort(['a', 'c', 'b'])
['a', 'b', 'c']
"""
# setting up variables
length = len(container)
changed = True
while changed:
changed = False
for i in range(length - 1):
if container[i] > container[i + 1]:
container[i], container[i + 1] = container[i + 1], container[i]
changed = True
length -= 1
問題是我必須進行哪些更改才能實現優化的第二個選項。 另外,到目前為止,我已經嘗試過像偽代碼一樣。 我的代碼沒有工作(沒有排序),看起來像:
# setting up variables
length = len(container)
while length >= 1:
number_of_changed = 0
for i in range(1, length - 1):
if container[i-1] > container[i]:
container[i-1], container[i] = container[i], container[i-1]
number_of_changed = i
length = number_of_changed
container = [7,1,2,6,4,2,3]
length = len(container)
while length >= 1:
num = 0
for i in range(1, length):
if container[i-1] > container[i]:
container[i-1], container[i] = container[i], container[i-1]
num = i
print(num,'\n')
length = num
print(container)
我看到的問題是,您將范圍設置為1到(length-1)->(7-1)為6,所以它將轉到數組中的第6個元素。 因此,從for循環的長度中減去負1即可解決問題。 嘗試將打印件放置在您認為可能會導致問題的位置,這將幫助您調試程序並告訴您所需的信息。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.