排序算法之low B三人组

排序low B三人组

列表排序:将无序列表变成有充列表

应用场景:各种榜单,各种表格,给二分法排序使用,给其他算法使用

输入无序列表,输出有序列表(升序或降序)

排序low B三人组

1. 冒泡排序

首先,列表每两个相邻的数做比较,如果前边的数比后边的数大,那么交换这两个数

def bubble_sort(l1):
    for i in range(len(l1)-1):
        for j in range(len(l1)-i-1):
            if l1[j] > l1[j+1]:
                l1[j],l1[j+1]=l1[j+1],l1[j]
                
    return l1

冒泡排序的优化

如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以直接结束排序

def bubble_sort_1(l1):
    for i in range(len(l1)-1):
        flag=False
        
        for j in range(len(l1)-i-1):
            if l1[j] > l1[j+1]:
                l1[j],l1[j+1]=l1[j+1],l1[j]
                flag=True
        
        if not flag:
            return l1

2. 选择排序

一趟遍历记录中最小的数,放到第一个位置
再一趟遍历记录剩余列表中最小的数,继续放置

    def select_sort(l1):
        for i in range(len(l1)-1):
            mid=i
    
            for j in range(i+1,len(l1)):
                if l1[j] <l1[mid]:
                    mid=j
    
            l1[mid],l1[i]=l1[i],l1[mid]
    
        return l1

3. 插入排序

列表被分有有序区和无序区两个部分.最初有序区只有一个元素

每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空

例如,最初时有一个无序列表l1=[5,7,4,6,3,1,2,9,8],其使用插入排序时的步骤为:

1.取无序列表l1中的第一个元素5,放入另一个有序列表tmp中
2.取无序列表l1中的第二个元素7,因为7比5大,把7放入有序列表tmp的第二个位置
3.取无序列表l1中的第三个元素4,因为4比5小,所以把4放入到有序列表tmp的元素5的左边中,此时有序列表tmp为[4,5,7]
4.取l1中第四个元素6,因为6比5大,又比7小,把6放入到元素5和7之间,此时tmp变成了[4,5,6,7]
...
每次从无序区中选择一个元素,插入到有序区的某个位置,直到无序区变空
def insert_sort(li):
    for i in range(1, len(li)):
        tmp = li[i]
        j = i - 1       #手里最后一张
        while j>=0 and li[j]>tmp:
            li[j+1]=li[j]
            j = j-1
        li[j+1] = tmp
        
    return li	
原文地址:https://www.cnblogs.com/renpingsheng/p/7784815.html