python 直接插入排序
# 先将未排序的元素放到九天之上,一个临时变量temp,上到九天之上去观察前面已经排好的序列,
# 然后从后向前对比,只要临时变量小于某个位置的值,就将其向前移动一位,就是给比它下标大
# 1的位置处赋值,它本身的值.这样它本身的位置空出来了.将九天之上的temp填入此处.直到
# 某个满足这样的条件才跳出循环,算一轮,1.遍历了前面所有的元素了,正常结束循环,算作一轮;2.遇到比temp小或等于的元素
# 此时,打断循环,算作一轮 def InsertSort(myList):
length = len(myList) for i in range(1, length):
temp = myList[i] for j in reversed(range(i)):
if myList[j] > temp:
myList[j + 1] = myList[j]
myList[j] = temp
else:
break
if __name__ == '__main__':
myList = [12, 15, 9, 20, 6, 31, 24]
InsertSort(myList)
print(myList)
插入排序的主要思想是每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表。
比如,待排序列表为[49,38,65,97,76,13,27,49],则比较的步骤和得到的新列表如下:
(带有背景颜色的列表段是已经排序好的,红色背景标记的是执行插入并且进行过交换的元素)
时间复杂度:O(n^2)
待排序: [49,38,65,97,76,13,27,49]
第一次比较后: [38,49,65,97,76,13,27,49] 第二个元素(38)与之前的元素进行比较,发现38较小,进行交换
第二次比较后: [38,49,65,97,76,13,27,49] 第三个元素(65)大于前一个元素(49),所以不进行交换操作,直接到下一个元素比较
第三次比较后: [38,49,65,97,76,13,27,49] 和第二次比较类似
第四次比较后: [38,49,65,76,97,13,27,49] 当前元素(76)比前一元素(97)小,(97)后移,(76)继续与(65)比较,发现当前元素比较大,执行插入
第五次比较后: [13,38,49,65,76,97,27,49]
第六次比较后: [13,27,38,49,65,76,97,49]
第七次比较后: [13,27,38,49,49,65,76,97]
从百度百科上盗了一张图:
python 直接插入排序的更多相关文章
- 史上最详细的C语言和Python的插入排序算法
史上最详细的C语言和Python的插入排序算法插入排序原理:所谓插入排序,就像我们在打牌(斗地主)时,整理我们自己手中自己的牌一样,就像是2,1,3,9,J,K,5,4,这四张牌.我们要把它其中的几张 ...
- Python排序 插入排序
插入排序从前往后遍历数组的每一个元素,对每一位元素都将其插入到已经有序的部分数组中,所以插入排序的要点就是找出要插入元素在已经有序的部分中的位置,同时,由于插入排序采用原地排序(in-place)算法 ...
- 算法导论之python实现插入排序
插入排序的花费时间 c*n2, c 是常数 伪代码 INSERTION-SORT(A) for i to A.length key = A[j] //Insert A[j] into the sor ...
- python之插入排序
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部 ...
- python 实现插入排序、冒泡排序、归并排序
def InsertSort(A): '''插入排序算法:传入一个list,对list中的数字进行排序''' print('插入排序前list元素顺序:',A) length=len(A) for i ...
- python算法-插入排序
插入排序 一.核心思想:在一个有序的数组中,通过逐一和前面的数进行比较,找到新数的位置. 例子:数组有有一个数21 插入一个3,3<21,因此结果为 3,21 再插入一个34,34>21, ...
- python——直接插入排序
直接插入排序 直接插入排序原理 直接插入排序过程 代码 时间复杂度分析 排序稳定性
- python 排序 插入排序与希尔排序
希尔排序是插入排序的升级版,先来了解插入排序 插入排序 算法思想: 插入排序再面对几乎已经有序的数据效率非常高,可以达到线性排序的效率 将数组元素插入已经有序的部分中,具体的过程是在有序的部分中通过比 ...
- python实现插入排序
代码如下@.·.@ # *-* coding: utf- *-* if __name__ == '__main__': def insert_sort(l): ,len(l)): tmp = l[i] ...
随机推荐
- HandlerInterceptor与WebRequestInterceptor的异同
相同点 两个接口都可用于Contrller层请求拦截,接口中定义的方法作用也是一样的. //HandlerInterceptor boolean preHandle(HttpServletReques ...
- Linux 学习Shell一部分指令
接下来就是shell命令的一些演示了 set (超级多的变量和系统默认值) echo $?查看上一条指令是否执行成功 返回0意味着成功,返回1意味着失败 echo 是个 env 设置变量 解释一下上面 ...
- 【LeetCode】796. 旋转字符串
796. 旋转字符串 知识点:字符串:KMP算法: 题目描述 给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结 ...
- Python 应用爬虫下载酷狗音乐
应用爬虫下载酷狗音乐 首先我们需要进入到这个界面 想要爬取这些歌曲链接,然而这个是一个假的网站,虽然单机右键进行检查能看到这些歌曲的链接,可进行爬取时,却爬取不到这些信息. 这个时候我们就应该换一种思 ...
- Redis如何实现分布式锁
今天我们来聊一聊分布式锁的那些事. 相信大家对锁已经不陌生了,我们在多线程环境中,如果需要对同一个资源进行操作,为了避免数据不一致,我们需要在操作共享资源之前进行加锁操作.在计算机科学中,锁(lock ...
- XSS挑战20关
第一关: 没有过滤,直接构造payload过关: http://127.0.0.1/xssgame/level1.php?name=test%3Cscript%3Ealert%28111%29%3C/ ...
- cpu设计实践1
本栏目将实现一个简单cpu(8-32位)的设计,使用xinlink spatan6平台
- Android模块化开发实践
一.前言 随着业务的快速发展,现在的互联网App越来越大,为了提高团队开发效率,模块化开发已经成为主流的开发模式.正好最近完成了vivo官网App业务模块化改造的工作,所以本文就对模块化开发模式进行一 ...
- SQL 练习12
查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息 分析 如果某同学学的某一个课程和01同学所学的课程有对应,那么子查询返回false. 如果没有对应,子查询返回tru ...
- 题解 b
传送门 考场上只会暴力 \(n^4\) DP,部分分还写炸了 但其实这个DP可以前缀和优化到 \(n^3\) ,我觉得没有这档部分分就没写 但其实是有这一档的,我没有看出来-- 正解想不到 如果我们已 ...