排序一

算法

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值