python选择、冒泡、插入排序
arr=[8,3,2,6,1,4,9,7]
选择排序:代码:
arr = [8,3,2,6,1,4,9,7]
for i in range(0,len(arr)):
for j in range(i+1,len(arr)):
if arr[i] >= arr[j]:
arr[i],arr[j] = arr[j],arr[i]
print(arr)
第一个及第二个循环:从第一个角标开始与之后顺序下每个角标比大小并交换位置
38261497 |
13862497 |
28361497 |
13862497 |
28361497 |
12863497 |
18362497 |
12863497 |
18362497 |
12863497 |
18362497 |
12863497 |
18362497 |
即,每次排序将最小的数优先排列于最前,每次循环可少循环一次。
冒泡排序:
arr = [8,3,2,6,1,4,9,7] # [3 2 6 1 4 8 9 7]
for i in range(0,len(arr)-1):
for j in range(0,len(arr)-1-i):
if arr[j] >= arr[j+1]:
arr[j],arr[j+1] = arr[j+1],arr[j]
print(arr)
第一及第二个循环:j在i的循环下为[0,7)--[0,6)--[0,5).....
38261497 |
23614897 |
32861497 |
23614897 |
32681497 |
23164897 |
32618497 |
23146897 |
32614897 |
23146897 |
32614897 |
23146897 |
32614897 |
23146879 |
选中第一个角标为j,然后j和j+1比较并交换位置
即,每次循环排序使得j<j+1
插入排序:
arr = [8,3,2,6,1,4,9,7]
for i in range(1,len(arr)):
for j in range(i,0,-1):
if arr[j] <= arr[j-1]:
arr[j],arr[j-1] = arr[j-1],arr[j]
print(arr)
第一次及第二次循环:i和j均指向一个角标,而j是与j-1作比较的,当j-1没有数了则使i+1同时j也进入新循环
38261497 |
32861497 |
23861497 |
即:红色从右往左,j与j-1作比较并换位置
计数排序:
arr = [7,3,2,0,1,2,3,6]
max_num = arr[0]
min_num = arr[0]
for num in arr:
11 . 切片
python分割可迭代的对象
一个完整的切片包含两个":"
语法格式
start_index: 切片切割开始的位置
end_index:切片切割结束的位置,不包含end_index处的元素
step:步长,默认值是1,也可以取负值(从右往左的切割)
以列表 a = [0,1,2,3,4,5,6,7,8,9]为例
1、切割单个值
2、切割完整的对象
if num > max_num:
max_num = num
elif num < min_num:
min_num = num
# print(max_num)
# print(min_num)
#计数列表的长度
len_arr1 = max_num - min_num + 1
#偏移量
offset = min_num
#初始化计数列表 元素全为0
arr1 = [0] * len_arr1
#排序后的列表
arr2 = [0] * len(arr)
#计数
for num in arr: # 7,3,2,0,1,2,3,6
print(num)
arr1[num-offset] += 1 # 0 0 0 0 0 0 0
print(arr1)
index = 0
for i in range(0,len_arr1):
for j in range(0,arr1[i]):
print(i+offset,end=" ")
arr2[index] = i + offset
index += 1
print()
print(arr2)
arr=[7,3,2,0,1,2,3,6]
最大值k为7,则开辟一个长度为k+1,即长度为8的数列,此数列的初始值均为0
设一个走访值为i,令其走过原数列的一个值便在该值对应的新数列角标对应的值下加一。
以此类推,走完原数列后,遍历列表以此打印下数即可
python选择、冒泡、插入排序相关推荐
- c#冒泡、快速、选择和插入排序算法的项目应用
在之前的一篇文章里,我们简单地实现了对一维数组的四种排序算法,但是在实际的项目中,我们排序的方式可能(几乎是一定)不止仅仅按照数字排序.我们常常按照合适的需要的排序方式进行排序,比如航班信息可能按时间 ...
- Laravel学习笔记之冒泡、快速、选择和插入排序(持续更新)
说明:本文是对个人学习冒泡.快速.选择和插入排序的小总结.面试经常问这些东西,虽然不知道为啥老爱问这些,该问的又不问.不管咋样,个人学习MySQL时有关索引就用到快速排序,索引也是以B+Tree数据结 ...
- 回炉篇5—数据结构(4)之冒泡、选择、插入排序算法
冒泡.选择.插入排序算法 排序大家都很熟了,很古老的算法,古老才有必要回炉再看一遍,经典才值得研究. 1.冒泡排序 从字面意思理解,水泡从水底冒出到水面的过程中,由小慢慢大,最后大泡泡冒出水面,了解这 ...
- 冒泡、快速、选择、插入排序以及时间复杂度、空间复杂度的解析
冒泡.快速.选择.插入排序以及时间复杂度.空间复杂度的解析 时间复杂度 时间复杂度的表示方法 时间复杂度的分析和计算方法 常见的几种时间复杂度 常见的时间复杂度排序 空间复杂度 时间复杂度的分析和计算 ...
- 面试必备:深入了解冒泡、选择和插入排序的优缺点
前言 相信排序对于每一个程序员来说都不会陌生,很可能你学的第一个算法就是排序,尤其冒泡排序大家可能都是信手拈来,但是当从学校走入了职场之后,这些经典的排序已经慢慢淡出了我们的视线,因为在日常开发中,高 ...
- c语言数组项目按身高排序,过三关 Java冒泡排序选择排序插入排序小练习
材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...
- 过三关 Java冒泡排序选择排序插入排序小练习
材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...
- python排序算法——插入排序
python排序算法--插入排序 文章目录 python排序算法--插入排序 一.前言 二.描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序算法是指 ...
- 十大经典排序算法详解(一)冒泡排序,选择排序,插入排序
养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 ...
- python代码实现插入排序
python代码实现插入排序 实现思路: 1.从数组的第二个数据开始往前比较,即一开始用第二个数和他前面的一个比较,如果 符合条件(比前面的大或者小,自定义),则让他们交换位置. 2.然后再用第三个数 ...
最新文章
- win10 mbr下装linux,在Win10下安装Ubuntu 18.04双系统(MBR+Legacy)
- C# HashTable的用法总结
- PL/SQL Developer 连接远程oracle的方法
- Powershell管理系列(十一)Exchange完全访问权限邮箱的设置
- java 音频 api_Java中的接口
- Linux性能分析工具汇总
- android图片选择库selectp,浅谈android的selector背景选择器
- Android精品开源项目整理_V20140221(持续更新中..)
- 【学习笔记】尚硅谷大数据项目之Flink实时数仓---数据可视化接口实现
- 台达PLC与台达DTE8路温控程序,威纶通触摸屏与温控器modbus485通讯
- STM8(STM8S003F3) Bootloader (IAP) 升级程序
- 浅谈几个数学问题的认识
- 关于RAM,ROM,EEPROM,FLASH,DDR,CACHE
- 我从校园出来的这几年
- python word,ppt,excel转pdf(word转html),转图片
- 楼市步入慢行道 购房窗口期显现?
- draw.io 插入 word
- 办公自动化:PDF文件合并器,用Python将多个PDF文件进行合并
- Burp Scanner Report
- Pycharm安装.ignore