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)

  

posted @ 2020-03-26 16:36  橙子Cjw  阅读(235)  评论(0编辑  收藏  举报