排序一

算法

1.时间复杂度:
问题:
    程序执行的时间长短,前提的基础是 硬件的条件必须相同
根本解决办法:
    程序执行的大概次数     用O(n)  n代表程序执行的次数

时间复杂度小结

时间复杂度是用来估计算法运行时间的一个式子(单位).
一般来说,时间复杂度高的算法比复杂度低的算法慢
常见的时间复杂度(按效率排序)
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
如何一眼判断时间复杂度?
循环减半的过程==>O(logn)
几次循环就是n的几次方的复杂度    # 比如两个for循环嵌套,就是n2
2.空间复杂度:
用来评估算法内存占用大小的一个式子

冒泡排序

def BubbleSort(li):
   for i in range(len(li)):  # 执行几次
    # 优化机制
    	flag = True
    	for j in range(len(li)-i-1):   # i等于几就表示几个数确定了
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]  # 交叉赋值
                flag = False
        if flag:
            return None

li = [7, 5, 4, 6, 3, 8, 2, 9, 1]
BubbleSort(li)
print(li)

# 时间复杂度: 两层循环O(n2)
# 空间复杂度:O(1)  # 没有额外的申请内存空间,比如在程序中 l = []

# 当给出的是已经排好序的列表,我们就可以进行简单地优化

选择排序

时间复杂度: O(n2)
空间复杂度: O(1)

def SelectSort(li):
    for i in range(len(li)):
        minLoc = i  # 随便拿出一个数字进行对比
        for j in range(r + 1, len(li)):
            if li[j] < li[minLoc]:
                li[j], li[minLoc] = li[minLoc], li[j]
li = [7, 5, 4, 6, 3, 8, 2, 9, 1]
SelectSort(li)
print(li)

    

插入排序

时间复杂度: O(n2)
空间复杂度: O(1)

列表被分为有序区和无序区两个部分.最初有序区只有一个元素.
每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空
def InsertSort(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
li = [7, 5, 4, 6, 3, 8, 2, 9, 1]
InsertSort(li)
print(li)

快速排序

快速排序
  快速排序的原理是取序列的第一个元素为基准元素,指定两个指针分别指向序列的开始和结尾,拿结尾指针指向的元素与基准元素比较,如果该元素比基准元素大,则指针减一继续比较,一旦发现比基准元素小的元素,则将该元素放至序列的最左侧,然后拿开始指针指向的元素与基准元素比较,如果该元素比基准元素小,则指针增一继续比较,一旦发现比基准元素大的元素,则将该元素放至结尾指针指向的位置,重复上述过程,则比基准元素大的元素全部到了基准元素右侧,比基准元素小的元素全部到了基准元素左侧,然后对左右两部分继续上述过程,不难发现可应用递归完成最终的排序。
程序
时间复杂度: O(nlogn)
def partition(li, left, right):
    temp = li[left]
    while left < right:
        while left < right and li[right] > tmp:
            right = right - 1
        li[left] = li[right]
        
        while left < right and li[left] < tmp:
            left = left + 1
        li[right] = li[left]
    li[left] = li[right] = tmp
    return left
def Quick_Sort(li, left, right):
    if left < right:
        mid = partition(li, left, right)
        Quick_Sort(li, left, mid)
        Quick_Sort(li, mid+1, right)
li = [7, 5, 4, 6, 3, 8, 2, 9, 1]
Quick_Sort(li, 0, len(li) - 1)
print(li)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值