下面代码是冒泡排序逐步优化,写代码用递归也可以实现。什么冒泡排序就不写了,百度解释很详细。对理论不是很感兴趣。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

"""

===========================

# @Time : 2020/9/19 19:54

# @File : 冒泡排序.py

# @Author: adeng

# @Date : 2020/9/19

============================

"""

import random,time

list_nums = random.sample(range(0,20000,3),12)

print(list_nums)

#---------------------for循环------------------

count = 0

for i in range(len(list_nums)):

pass

flag = True

for j in range(len(list_nums)-1-i):

count += 1

if list_nums[j] > list_nums[j+1]:

flag = False

list_nums[j], list_nums[j+1] = list_nums[j+1], list_nums[j]

if flag:

break

print(list_nums)

# 查看比较多少次

print("比较的次数为{}".format(count))

#-------------------------while循环---------------------

i = 0

count =0

while i < len(list_nums):

j = 0

while j< len(list_nums)-1 -i:

count += 1

if list_nums[j] > list_nums[j + 1]:

list_nums[j], list_nums[j+1] = list_nums[j+1], list_nums[j]

j += 1

i += 1

print(list_nums)

print("比较的次数为{}".format(count))

# 优化冒泡排序

# ---------------------------优化冒泡排序------------

i = 0

count1 =0

start_time = time.time()

while i < len(list_nums):

flag = True # 假设每一趟都没有换行

j = 0

while j< len(list_nums)-1 -i:

count1 += 1

if list_nums[j] > list_nums[j + 1]:

list_nums[j], list_nums[j+1] = list_nums[j+1], list_nums[j]

flag = False # 交换了大小,flag为False

j += 1

if flag:

# 这一趟走完以后,flag依然为True,说明这一趟没有进行数据交换

break

i += 1

end_time = time.time()

print(f"冒牌排序花费时间{end_time-start_time}秒")

print(list_nums)

print("比较的次数为{}".format(count1))

#------------------------递归----------------------------------

from typing import List

def array_init(array: List[int], n:int) -> List:

i = 0

j = 1

while j < len(array):

if array[i] > array[j]:

array[i], array[j] = array[j], array[i]

i += 1

j += 1

if n == 1:

# print("array:",array)

return array

return array_init(array, n - 1)

start_time = time.time()

print(array_init(list_nums, len(list_nums)))

end_time = time.time()

print(f"冒牌排序花费时间{end_time-start_time}秒")

# ------------------------------封装---------------

def get_random_list(num:int,length)-> list:

"""

获取一个随机列表

@param array: 列表

@return: 返回一个列表

"""

return random.sample(range(num),length)

def sort_iter(list_num:list,reverse=False) -> list:

"""

@param list_num: 列表排序

@param reverse: False 升序 True 降序

@return: 返回列表

"""

global count

count = 0

for i in range(len(list_num)):

pass

flag = True

for j in range(len(list_num) - 1 - i):

count += 1

if not reverse:

if list_num[j] > list_num[j + 1]:

flag = False

list_num[j], list_num[j + 1] = list_num[j + 1], list_num[j]

else:

if list_num[j] < list_num[j + 1]:

flag = False

list_num[j], list_num[j + 1] = list_num[j + 1], list_num[j]

if flag:

break

return list_num

print(sort_iter([3,2,1,10,8,3,6,],reverse=True),count)

def sort_lists(list_num:list,reverse=False) ->list:

"""

@param list_num: 列表,元素要是int类型

@param reverse: False 升序,True降序

@return: 返回列表

"""

i = 0

count = 0 # 统计比较了多少次

while i < len(list_num):

flag = True # 假设每一趟都没有换行

j = 0

while j < len(list_num) - 1 - i:

count += 1

if not reverse:

if list_num[j] > list_num[j + 1]:

list_num[j], list_num[j + 1] = list_num[j + 1], list_num[j]

flag = False # 交换了大小,flag为False

else:

if list_num[j] < list_num[j + 1]:

list_num[j], list_num[j + 1] = list_num[j + 1], list_num[j]

flag = False # 交换了大小,flag为False

j += 1

if flag:

# 这一趟走完以后,flag依然为True,说明这一趟没有进行数据交换

break

i += 1

return list_num

a = [3,1,5,6,4,3,0]

sort_lists(a,reverse=True)

print(a) # [6, 5, 4, 3, 3, 1, 0]

使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序相关推荐

  1. python遍历数组冒泡排序_Python算法(一) 数组冒泡排序(难度等级:easy)

    冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序. 算法原理:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队 ...

  2. python性能解决_Python性能优化的20条建议

    优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1).不同的场 ...

  3. python 系统架构_Python之优化系统架构的方案

    方案3: 改变系统架构 在开始多进程之前,先简单说明一下python GIL, 之前自己对他也有些误解.因为python GIL的机制存在,同时运行的线程只有一个,但这个线程在不同时刻可以运行在不同的 ...

  4. python目标函数最大_python运筹优化(三):遗传算法和Geatpy使用实践

    这个专栏以工具实践为主,因此我们先讲进化算法工具包geatpy的使用. 关于遗传算法的推导原理我们举一个最简单的袋鼠爬山的例子,然后看遗传算法从头到尾怎么"编码-计算适应度-选择淘汰-基因交 ...

  5. python 线程死锁_python线程死锁与递归锁

    死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待 ...

  6. 十三、冒泡排序算法及其优化

    一.基本介绍 **冒泡排序(Bubble Sorting)的基本思想是:**通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部, ...

  7. Python版基于递归的冒泡排序算法

    应读者要求,写个基于递归的冒泡排序算法代码,之前发过的排序算法代码请参考Python版快速排序算法,Python版选择排序算法,Python版冒泡法排序算法. from random import r ...

  8. 冒泡排序算法以及优化

    什么是冒泡排序呢?冒泡排序的英语名是Bubble Sort,是一种最基础的交换排序. 大家一定都喝过汽水吧,汽水中常常有许多小小的气泡,往上飘,这是因为组成小气泡的二氧化碳比水要轻,所以小气泡才会一点 ...

  9. 【十大排序算法】(一)冒泡排序算法(优化)

    一.优化第一版 优化第一版是针对类似 int[] arr = {3,2,1,4,5,6,7,8,9; 这样的有很多已经排好序的数组,为了不让它做无用的循环,对于此场景进行的优化,优化代码如下: // ...

  10. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

最新文章

  1. CV语义分割实践指南!
  2. python 比较文件夹或列表异同
  3. access 日期交集_Access重要知识点
  4. html桌面图标样式,如何更改图标样式,换桌面图标的方法
  5. 行人属性数据集pa100k_基于InceptionV3的多数据集联合训练的行人外观属性识别方法与流程...
  6. Android 自定义漂亮的圆形进度条
  7. 识别你的ADFS是什么版本的(Which version of ADFS is running)
  8. 怎么使用计算机算法,浅谈如何在用计算机来更好的实现Floyd算法
  9. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 grafana 度量分析和可视化
  10. linux修改文件权限为所有人都可以访问,Linux 笔记分享八:文件权限的设定
  11. [学习][记录] c++语言:从放弃到入门 <一> c++11新关键字以及引入的新特性
  12. 谷“哥”性丑闻还要对谷姐性侵犯?
  13. 过来人:软件测试自学还是报班好?需要掌握哪些技能?
  14. 北大青鸟 ASP.NET(C#) 视频 全32集
  15. 介绍国内外CMS系统
  16. layui表格自定义分页
  17. Kaggle 大神 Eureka 的高手进阶之路
  18. 高级算法梳理(一)随机森林算法梳理
  19. 渗透测试-sqlmap绕过WAF脚本编写
  20. PEX8796等设计资料

热门文章

  1. Angular路由开发的一个实际例子
  2. Java Spring Beans.xml里的Bean定义是如何被解析出来的
  3. SAP Fiori Elements - Account F4 help - how value help dialog is populated
  4. Scala range reverse调试
  5. 如何将csv包含的数据导入SAP Cloud Platform HANA MDC里
  6. SAP UI5和微信小程序框架里的全局变量
  7. ABAP的数据字典DDIC和Hybris Commerce的类型系统Type system
  8. Daimler CRM中间件 inbound 调试
  9. One order OPPORT_H read的学习笔记
  10. SAP ABAP Netweaver Note download debug