py-冒泡排序

import random
"""
排序:將一組無序記錄序列調整爲有序記錄序列
列表排序:將無序列表調整爲有序列表
    輸入:列表
    輸出:有序列表
升序與降序
內置函數sort()
"""
#冒泡排序 bubble Sort
#1、列表每兩個相鄰的兩個數,若前面比後面的大,則交換這個數
#2、一趟排序完成後,則無序列表減少一個數,有序區增加一個數 ps 循環一次會篩選出最大值放置有序區,剩餘無序區再循環
def bubble_Sort(li):
    for i in range(len(li) - 1):# 第一次循環篩選出最大值
        for j in range(len(li) -i -1):
            if li[j] > li[j+1]:#--升序 
           #if li[j] < li[j+1] -----降序
                li[j],li[j+1] = li[j+1],li[j]
        print (li)
#生成100個0-1000的隨機數的列表,
#li = [random.randint(0,100) for i in range(10)]
"""li = [2,5,4,6,3,1,8,9,7]
print(li)
print("分割線--------------------")
bubble_Sort(li)
print(li)"""

"""
[2, 5, 4, 6, 3, 1, 8, 9, 7] ----------原列表
分割線--------------------
[2, 4, 5, 3, 1, 6, 8, 7, 9]
[2, 4, 3, 1, 5, 6, 7, 8, 9]
[2, 3, 1, 4, 5, 6, 7, 8, 9]
[2, 1, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
"""

#冒泡優化,當一次循環沒有發生任何交換,那麼就認爲列表已經被排好序了,就結束
def bubble_Sort2(li):
    for i in range(len(li) - 1):# 第一次循環篩選出最大值
        exchange = False
        for j in range(len(li) -i -1):
            if li[j] > li[j+1]:#--升序 
           #if li[j] < li[j+1] -----降序
                li[j],li[j+1] = li[j+1],li[j]
                exchange = True
        print (li)
        if not exchange:
            return
li2 = [2,5,4,6,3,1,8,9,7]
print(li2)
print("分割線--------------------")
bubble_Sort2(li2)
print(li2)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章