使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序
下面代码是冒泡排序逐步优化,写代码用递归也可以实现。什么冒泡排序就不写了,百度解释很详细。对理论不是很感兴趣。
#!/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 冒泡排序优化,用递归实现冒泡排序相关推荐
- python遍历数组冒泡排序_Python算法(一) 数组冒泡排序(难度等级:easy)
冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序. 算法原理:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队 ...
- python性能解决_Python性能优化的20条建议
优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1).不同的场 ...
- python 系统架构_Python之优化系统架构的方案
方案3: 改变系统架构 在开始多进程之前,先简单说明一下python GIL, 之前自己对他也有些误解.因为python GIL的机制存在,同时运行的线程只有一个,但这个线程在不同时刻可以运行在不同的 ...
- python目标函数最大_python运筹优化(三):遗传算法和Geatpy使用实践
这个专栏以工具实践为主,因此我们先讲进化算法工具包geatpy的使用. 关于遗传算法的推导原理我们举一个最简单的袋鼠爬山的例子,然后看遗传算法从头到尾怎么"编码-计算适应度-选择淘汰-基因交 ...
- python 线程死锁_python线程死锁与递归锁
死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待 ...
- 十三、冒泡排序算法及其优化
一.基本介绍 **冒泡排序(Bubble Sorting)的基本思想是:**通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部, ...
- Python版基于递归的冒泡排序算法
应读者要求,写个基于递归的冒泡排序算法代码,之前发过的排序算法代码请参考Python版快速排序算法,Python版选择排序算法,Python版冒泡法排序算法. from random import r ...
- 冒泡排序算法以及优化
什么是冒泡排序呢?冒泡排序的英语名是Bubble Sort,是一种最基础的交换排序. 大家一定都喝过汽水吧,汽水中常常有许多小小的气泡,往上飘,这是因为组成小气泡的二氧化碳比水要轻,所以小气泡才会一点 ...
- 【十大排序算法】(一)冒泡排序算法(优化)
一.优化第一版 优化第一版是针对类似 int[] arr = {3,2,1,4,5,6,7,8,9; 这样的有很多已经排好序的数组,为了不让它做无用的循环,对于此场景进行的优化,优化代码如下: // ...
- Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习
Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...
最新文章
- CV语义分割实践指南!
- python 比较文件夹或列表异同
- access 日期交集_Access重要知识点
- html桌面图标样式,如何更改图标样式,换桌面图标的方法
- 行人属性数据集pa100k_基于InceptionV3的多数据集联合训练的行人外观属性识别方法与流程...
- Android 自定义漂亮的圆形进度条
- 识别你的ADFS是什么版本的(Which version of ADFS is running)
- 怎么使用计算机算法,浅谈如何在用计算机来更好的实现Floyd算法
- Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 grafana 度量分析和可视化
- linux修改文件权限为所有人都可以访问,Linux 笔记分享八:文件权限的设定
- [学习][记录] c++语言:从放弃到入门 <一> c++11新关键字以及引入的新特性
- 谷“哥”性丑闻还要对谷姐性侵犯?
- 过来人:软件测试自学还是报班好?需要掌握哪些技能?
- 北大青鸟 ASP.NET(C#) 视频 全32集
- 介绍国内外CMS系统
- layui表格自定义分页
- Kaggle 大神 Eureka 的高手进阶之路
- 高级算法梳理(一)随机森林算法梳理
- 渗透测试-sqlmap绕过WAF脚本编写
- PEX8796等设计资料
热门文章
- Angular路由开发的一个实际例子
- Java Spring Beans.xml里的Bean定义是如何被解析出来的
- SAP Fiori Elements - Account F4 help - how value help dialog is populated
- Scala range reverse调试
- 如何将csv包含的数据导入SAP Cloud Platform HANA MDC里
- SAP UI5和微信小程序框架里的全局变量
- ABAP的数据字典DDIC和Hybris Commerce的类型系统Type system
- Daimler CRM中间件 inbound 调试
- One order OPPORT_H read的学习笔记
- SAP ABAP Netweaver Note download debug