排序方法

参考网站:(https://mp.weixin.qq.com/s/VX9LwTK77RUPLBFHPS1Z1A)
1.选择排序:原理:选择列表中最小的元素,每次挪动最小的到最左边,依次进行。

def SelectSort(alist):
        n=len(alist)
        for i in range(n-1):
                min_index=i
                for j in range(i+1,n):
                        if alist[j] < alist[min_index]:
                                min_index=j
                alist[i],alist[min_index]=alist[min_index],alist[i]
        print alist

SelectSort([3,5,38,15,36,55,2])
2.冒泡排序:原理:从左往右二二比较,一轮将最大的元素挪到最右边,依次下去

def bubbleSort(alist):
        n = len(alist)
        for i in range(n-1, 0, -1):
                for j in range(0, i):
                        if alist[j] > alist[j+1]:
                                alist[j], alist[j+1] = alist[j+1], alist[j]
        print alist

bubbleSort([3,5,38,15,36,55,2])

优化:有得时候没有完全遍历,已经排列成功。

def bubbleSort(alist):
        n = len(alist)
        exchange = False
        for i in range(n-1, 0, -1):
                for j in range(0, i):
                        if alist[j] > alist[j+1]:
                                alist[j], alist[j+1] = alist[j+1], alist[j]
                                exchange = True
                if not exchange :
                        break
        print alist

bubbleSort([3,5,38,15,36,55,2])

3.插入排序: 插入排序的算法复杂度仍然是O(n2),但其工作原理稍有不同。它总是保持一个位置靠前的 已排好的子表,然后每一个新的数据项被“插入”到前边的子表里,排好的子表增加一项。我们认为只含有一个数据项的列表是已经排好的。每排后面一个数据(从1开始到n-1),这 个的数据会和已排好子表中的数据比较。比较时,我们把之前已经排好的列表中比这个数据大的移到它的右边。当子表数据小于当前数据,或者当前数据已经和子表的所有数据比较了时,就可 以在此处插入当前数据项。

def insertionsort(alist):
        n = len(alist)
        for i in range(1,n):
                temp=alist[i] #被插入
                for j in range(i,0,-1):
                        if (temp < alist[j-1]):
                                alist[j]=alist[j-1]
                        else:
                                break
                        alist[j-1]=temp
        print alist

insertionsort([3,5,38,15,36,55,2])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值