常见排序算法-Python实现

news2024/11/25 11:27:35

在这里插入图片描述

python

排序

算法

1.二分法

​ python 32行

#coding=utf-8 
def binary_search(input_array, value): 
 """Your code goes here.""" 
    length = len(input_array) 
    left = 0 
    right = length-1 
 if length == 1: 
 return 0 if value == input_value[0] else -1 
 else: 
        mid = (left+right)/2 
 while(right-left>1): 
 if input_array[mid] == value: 
 return mid 
 elif input_array[mid] > value: 
                right = mid 
                mid = (left+right)/2 
 else: 
                left = mid 
                mid = (left+right)/2 
 if input_array[left] == value: 
 return left 
 elif input_array[right] == value: 
 return right 
 else: 
 return -1 
 
test_list = [1,3,9,11,15,19,29] 
test_val1 = 25 
test_val2 = 15 
print (binary_search(test_list, test_val1)) 
print (binary_search(test_list, test_val2)) 

2.冒泡法

​ python 60行

#coding=utf-8 
 
# way=1递增排序 way=0递减排序 
def bubble_sort(array,way=1): 
	length = len(array) 
 
 if not length: 
		print("Error!The length of array must be greater than 0.\n") 
 return 'Wrong array' 
 
 if way == 1: 
 while length > 0: 
 for i in range(length-1): 
 if array[i] > array[i+1]: 
					array[i],array[i+1] = array[i+1],array[i] 
			length -= 1 
 return array 
 
 elif way == 0: 
 while length > 0: 
 for i in range(length-1): 
 if array[i] < array[i+1]: 
					array[i],array[i+1] = array[i+1],array[i] 
			length -= 1 
 return array 
 
# 加入排序判断标志,可提高运行效率 
# way=1递增排序 way=0递减排序 
def better_bubble_sort(array,way=1): 
	is_sorted = True # 判断记录上次遍历是否进行过交换,若没有则表示不用再遍历了 
	length = len(array) 
 
 if not length: 
		print("Error!The length of array must be greater than 0.\n") 
 return 'Wrong array' 
 
 if way == 1: 
 while length > 0 and is_sorted: 
 for i in range(length-1): 
				is_sorted = False 
 if array[i] > array[i+1]: 
					array[i],array[i+1] = array[i+1],array[i] 
					is_sorted = True 
			length -= 1 
 return array 
 
 elif way == 0: 
 while length > 0 and is_sorted: 
 for i in range(length-1): 
				is_sorted = False 
 if array[i] < array[i+1]: 
					array[i],array[i+1] = array[i+1],array[i] 
					is_sorted = True 
			length -= 1 
 return array 
 
 
test =  [21, 4, 1, 3, 9, 20, 25, 6, 21, 14]  
print(better_bubble_sort(test,1)) 

3.插入排序

​ python 19行

#coding=utf-8 
 
def insert_sort(array): 
	length = len(array) 
	flag = array[0] 
 for x in range(1,length): 
 # 之前的 
 if array[x] < array[x-1]: 
			flag = array[x] 
			y = x 
 while y != 0 and array[y-1] > flag : 
				array[y] = array[y-1] 
				y -= 1 
			array[y] = flag 
 return array 
 
test = [21, 4, 1, 3, 9, 20, 25, 20, 3] 
print(insert_sort(test)) 

4.归并排序

​ python 31行

#coding=utf-8 
 
def merge_sort(array): 
 if len(array) <= 1: 
 return array 
 
	split_index = len(array)/2 
	left = merge_sort(array[:split_index]) 
	right = merge_sort(array[split_index:]) 
 return merge(left,right) 
 
def merge(left,right): 
	i = 0 
	j = 0 
	result = [] 
 while i < len(left) and j < len(right): 
 if left[i] <= right[j]: 
			result.append(left[i]) 
			i += 1 
 else: 
			result.append(right[j]) 
			j += 1 
 
	result += (left[i:]) 
	result += (right[j:]) 
 return result 
 
a = [1,2] 
test = [21, 4, 1, 3, 9, 20, 25]  
print(merge_sort(test)) 

5.选择排序

​ python 16行

#coding=utf-8 
 
def select_sort(array): 
	length = len(array) 
 # mini = array[0] 
 for i in range(length): 
		mini = array[i] 
 for j in range(i,length): 
 if array[j] < mini: 
				mini = array[j] 
				array[i],array[j] = array[j],array[i] 
 return array 
 
test = [21, 4, 1, 3, 9, 20, 25, 20, 3]  
print(select_sort(test)) 

6.快速排序

​ python 26行

#coding=utf-8 
 
# 递归 
def quick_sort(lists, left, right): 
 # 快速排序 
 if left >= right: 
 return lists 
    key = lists[left] 
    low = left 
    high = right 
 while left < right: 
 while left < right and lists[right] >= key: 
            right -= 1 
        lists[left] = lists[right] 
 while left < right and lists[left] <= key: 
            left += 1 
        lists[right] = lists[left] 
    lists[right] = key 
    quick_sort(lists, low, left - 1) 
    quick_sort(lists, left + 1, high) 
 return lists 
 
 
test = [21, 4, 1, 3, 9, 20, 25, 6, 21, 14] 
print (quick_sort(test,0,len(test)-1)) 

更多Python的学习资料可以扫描下方二维码无偿领取!!!

1)Python所有方向的学习路线(新版)

总结的Python爬虫和数据分析等各个方向应该学习的技术栈。

在这里插入图片描述

比如说爬虫这一块,很多人以为学了xpath和PyQuery等几个解析库之后就精通的python爬虫,其实路还有很长,比如说移动端爬虫和JS逆向等等。

img

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然达不到大佬的程度,但是精通python是没有问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/795708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 多线程并发Socket服务端的实现( 11 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

3秒快速打开 jupyter notebook

利用 bat 脚本&#xff0c;实现一键打开 minconda 特点&#xff1a; 1、可指定 python 环境 2、可指定 jupyter 目录 一、配置环境 minconda 可以搭建不同的 python 环境&#xff0c;所以我们需要找到 minconda 安装目录&#xff0c;把对应目录添加到电脑环境 PATH 中&#…

prepros.crack.7.8.5 by Xacker

您友好的 Web 开发伙伴 Prepros 编译您的文件&#xff0c;转译您的 JavaScript&#xff0c;重新加载您的浏览器&#xff0c;并使开发和测试您的网站变得非常容易&#xff0c;这样您就可以专注于使它们完美。 适用于 Windows、macOS 和 Linux 试用版包括所有 Prepros 功能。 编…

【数据结构】树状数组和线段树

树状数组和线段树 下文为自己的题解总结&#xff0c;参考其他题解写成&#xff0c;取其精华&#xff0c;做以笔记&#xff0c;如有描述不清楚或者错误麻烦指正&#xff0c;不胜感激&#xff0c;不喜勿喷&#xff01; 树状数组 需求&#xff1a; 能够快速计算区间和保证在修改…

了解 MySQL 中 MVCC 的原理

点击上方↑“追梦 Java”关注&#xff0c;一起追梦&#xff01; 要解决读一致性的问题&#xff0c;保证一个事务中前后两次读取数据结果一致&#xff0c;还有一种 MVCC 的方式&#xff0c;又叫多版本的并发控制&#xff08;Multi Version Concurrency Control&#xff09;。 MV…

Flink状态的理解

Flink是一个带状态的数据处理系统&#xff1b;系统在处理数据的过程中&#xff0c;各算子所记录的状态会随着数据的处理而不断变化&#xff1b; 1. 状态 所谓状态State&#xff0c;一般指一个具体的 Task 的状态&#xff0c;即线程处理过程中需要保存的历史数据或历史累计数据…

SpringBoot集成Redis的环境部署以及操作Redis

文章目录 Spring Boot 集成Redis1.环境配置 redis连接配置信息不写默认wei6379&#xff0c;数据库为02.操作Redis2.1 代码形式操作Redis2.2 使用注解方式操作Redis Spring Boot 集成Redis 1.环境配置 添加redis依赖 在老项目添加&#xff0c;可以在pom.xml文件直接添加&#…

DAMO-YOLO 论文学习

1. 解决了什么问题&#xff1f; 工业界追求高性能、低延迟的目标检测算法&#xff0c;研究人员于是聚焦于单阶段目标检测&#xff0c;探索高效的网络结构和训练策略。YOLOv5/v6/v7、YOLOX 和 PP-YOLOE 在 COCO 数据集上实现了不错的精度-速度平衡&#xff0c;得到广泛应用&…

超标量处理器寄存器rename

1.相关性介绍 在CPU中&#xff0c;一段程序会被编译成一连串的汇编指令&#xff0c;指令与指令之间可能会具有相关性&#xff08;dependency&#xff09;。所谓相关性&#xff0c;即一条指令的执行会依赖于另一条指令的结果&#xff0c;相关性可以分为&#xff1a;① 数据相关性…

el-table树形表格实现复选框多选效果

2023.7.26今天我学习了如何使用树形表格的时候进行复选框的多选效果。 当我们使用树形结构表格需要进行多选功能操作的时候会发现点击全选的时候&#xff0c;只有一级表格数据会被选中&#xff0c;问题如图&#xff1a; 我们需要实现的是点击全选的不管是几级表格数据都可以被…

ElasticSearch之IK分词器安装以及使用介绍

文章目录 一、IK 分词器简介1. 支持细粒度分词&#xff1a;2. 支持多种分词模式&#xff1a;3. 支持自定义词典&#xff1a;4. 支持拼音分词&#xff1a;5. 易于集成和使用&#xff1a; 二、安装步骤1、下载 IK 分词器插件&#xff1a;2、安装 IK 分词器插件&#xff1a;3. 安装…

各种知名游戏的技术分析

介绍一个GitHub&#xff0c;里面包括了市面上的各种游戏的技术分析&#xff0c;包括渲染管线、工作流、技术文章等等&#xff0c;在做某个类型的游戏的时候&#xff0c;可以针对某个游戏去进行技术参考&#xff0c;特别实用。 GitHub - OTFCG/Awesome-Game-Analysis: a compre…

C++设计模式之模板方法、策略模式、观察者模式

面向对象设计模式是”好的面向对象设计“&#xff0c;所谓”好的面向对象设计“指的是可以满足”应对变化&#xff0c;提高复用“的设计。 现代软件设计的特征是”需求的频繁变化“。设计模式的要点是”寻求变化点&#xff0c;然后在变化点处应用设计模式&#xff0c;从而更好地…

力扣天天练--week3-LeetCode75

topic75-9-t443:压缩字符串 题目描述&#xff1a; 给你一个字符数组 chars &#xff0c;请使用下述算法压缩&#xff1a; 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 &#xff1a; 如果这一组长度为 1 &#xff0c;则将字符追加到 s 中。 否则&#xff0c;需…

Spring Boot中整合MyBatis(基于xml方式基于注解实现方式)

一、前提准备 在Spring Boot中整合MyBatis时&#xff0c;你需要导入JDBC&#xff08;不需要手动添加&#xff09;和Druid的相关依赖。 JDBC依赖&#xff1a;在Spring Boot中整合MyBatis时&#xff0c;并不需要显式地添加JDBC的包依赖。这是因为&#xff0c;当你添加mybatis-sp…

会捷通云视讯 list 目录文件泄露漏洞

劳动永远是医治精神创伤的良药。 漏洞描述 会捷通云视讯某个文件 list参数 存在目录文件泄露漏洞&#xff0c;攻击者通过漏洞可以获取一些敏感信息 漏洞复现 构造payload访问漏洞url&#xff1a; /him/api/rest/V1.0/system/log/list?filePath../漏洞证明&#xff1a; 文…

Mendix 创客访谈录|综合业务展示大屏应用开发

本期创客 刘书智 西门子工业领域专家 我在西门子工厂自动化工程有限公司工作。一直从事SCADA产品的技术支持工作&#xff0c;已经过去17个年头了。赶上数字化发展的浪潮&#xff0c;不断学习各种IT技术&#xff0c;践行 IT与OT融合&#xff0c;希望借助自己的IT知识助力OT的发…

编程实战班--C语言和Python语言实现五子棋游戏的代码

文章目录 下面分别是C语言和Python语言实现五子棋游戏的代码&#xff1a;C语言实现Python语言实现总结 下面分别是C语言和Python语言实现五子棋游戏的代码&#xff1a; C语言实现 在使用C语言实现五子棋游戏时&#xff0c;可以使用SDL2图形库来实现图形界面和图形绘制等功能&…

华为华三思科 交换机基础配置一览

console密码修改 华为 user-interface console 0 authentication-mode password set authentication password cipher XXXXXXXXX华三 line aux 0 authentication-mode password set auth pass simple XXX思科 en configure terminal line console 0 password 123 login忘记…

打开英雄联盟提示d3dcompiler47.dll缺失怎么修复

1.d3dcompiler_47.dll缺失的原因 损坏的文件&#xff1a;d3dcompiler_47.dll文件可能由于某些原因损坏&#xff0c;如病毒感染、意外删除等。 不兼容的操作系统&#xff1a;某些应用程序要求特定版本的d3dcompiler_47.dll文件&#xff0c;如果操作系统不兼容&#xff0c;则可能…