使用python实现冒泡、选择、插入基础排序
冒泡排序
依次比较相邻两元素,若前一元素大于后一元素则交换之,直至最后一个元素即为最大;
然后重新从首元素开始重复同样的操作,直至倒数第二个元素即为次大元素;
依次类推。如同水中的气泡,依次将最大或最小元素气泡浮出水面。

实现
# 冒泡排序
def bubble_sort(li):
# 建立一个标识符
flag = False
for i in range(len(li)-1):
for j in range(len(li)-i-1):
if li[j] > li[j+1]:
li[j], li[j+1] = li[j+1], li[j]
flag = True
# 如果没进行交换,则本身有序,直接break
if not flag:
break
return li
算法分析
- 平均时间复杂度:O(n2),标准的内外两层循环
- 最好时间复杂度:O(n),如果有序,那么第一趟就ok了
- 最坏时间复杂度:O(n2)
- 空间复杂度:O(1)
- 稳定性:稳定的
选择排序
首先初始化最小元素索引值为首元素,依次遍历待排序数列,若遇到小于该最小索引位置处的元素则刷新最小索引为该较小元素的位置,直至遇到尾元素,结束一次遍历,并将最小索引处元素与首元素交换;
然后,初始化最小索引值为第二个待排序数列元素位置,同样的操作,可得到数列第二个元素即为次小元素;以此类推。

实现
# 选择排序 O(n^2)
# 从第一个元素开始选择最小的元素放在第一位,然后再选择第二个元素
def select_sort(li):
for i in range(len(li)-1):
# 第i趟 无序区范围i到最后
min_pos = i # 无序区最小值位置
for j in range(i+1, len(li)):
if li[j] < li[min_pos]:
min_pos = j
li[i], li[min_pos] = li[min_pos], li[i]
算法分析
- 平均时间复杂度:O(n2),嵌套双循环
- 最好时间复杂度:O(n2),每次要找最大最小肯定是要遍历一遍的
- 最坏时间复杂度:O(n2)
- 空间复杂度:O(1)
- 稳定性:稳定的
插入排序
将列表分为有序区和无序区两个部分,最初有序区只有一个元素,即第一个元素。
然后每次从无序区选择一个元素,插入到有序区中,直到无序区为空。
如下图,橙色为有序区,浅蓝色为无序区。

实现
# 选择排序 O(n2)
def insert_sort(li):
# i表示从下标1开始的数字, 第二个元素
for i in range(1, len(li)):
tmp = li[i]
j = i - 1
# 只要往后挪就循环
while j >= 0 and li[j] > tmp:
# 如果j = -1停止挪, 如果li[j]小于tmp停止挪
li[j + 1] = li[j]
j -= 1
# j位置在循环结束的时候要么是-1要么是比tmp小的值
li[j+1] = tmp
算法分析
- 平均时间复杂度:O(n2)
- 最好时间复杂度:O(n),如果有序,那么每个元素都已经在在它的待排子序列的合适位置,不用找合适位置
- 最坏时间复杂度:O(n2)
- 空间复杂度:O(1)
- 稳定性:稳定的
~>.<~
使用python实现冒泡、选择、插入基础排序的更多相关文章
- python 数据结构与算法之排序(冒泡,选择,插入)
目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...
- C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)
算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...
- python 中的一些基础算法:递归/冒泡/选择/插入
递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...
- 基本排序-冒泡/选择/插入(python)
# -*- coding: utf-8 -*- import random def bubble_sort(seq): n = len(seq) for i in range(n-1): print( ...
- Python 多级目录选择+一键正反排序
效果如图所示,可以根据条件来选择对象 cat pc.py #!/usr/bin/pythonfrom flask import Flask,render_template,request,redire ...
- java 基础排序(冒泡、插入、选择、快速)算法回顾
java 基础排序(冒泡.插入.选择.快速)算法回顾 冒泡排序 private static void bubbleSort(int[] array) { int temp; for (int i = ...
- python数据结构之选择排序
选择排序(select_sort)是一个基础排序,它主要通过查找已给序列中的元素的最大或者最小元素,然后将其放在序列的起始位置或者结束位置,并通过多次这样的循环完成对已知序列的排序,在我们对n个元素进 ...
- Python与Go选择排序
#!/usr/bin/env python # -*- coding: utf-8 -*- # 选择排序 # 时间复杂度O(n^2) def selection_sort(array): length ...
- Python实现的选择排序算法原理与用法实例分析
Python实现的选择排序算法原理与用法实例分析 这篇文章主要介绍了Python实现的选择排序算法,简单描述了选择排序的原理,并结合实例形式分析了Python实现与应用选择排序的具体操作技巧,需要的朋 ...
随机推荐
- 日常问题--解决 ‘Could not fetch URL https://pypi.python.org’的问题
难题描述: 解决方法: 使用命令python -m pip install Scrapy --trusted-host=pypi.python.org --trusted-host=pypi.org ...
- 洛谷P1308 统计单词数
原题链接:https://www.luogu.org/problem/P1308 #include<iostream> #include<cstring> #include&l ...
- java8的ConcurrentHashMap为何放弃分段锁,为什么要使用CAS+Synchronized取代Segment+ReentrantLock
原文地址:https://cloud.tencent.com/developer/article/1509556 推荐一篇 ConcurrentHashMap 和 HashMap 写的比较的的文章 j ...
- 【Python】表白代码
# -*- coding:utf-8 -*- import turtle import time # 画爱心的顶部 def LittleHeart(): for i in range(200): tu ...
- K3/Cloud 执行计划任务错误排查
计划任务的不执行原因可能有: 1.K3CloudJobProcess服务处于停止状态. 2.数据中心未勾选“允许执行计划任务”. 这种情况此数据中心下的所有计划任务都不会执行到. 3.第一次加进计划任 ...
- 从ASCII到Unicode再到UTF-8的历史原由
编码 大小 支持语言 ASCII 1个字节 英文 Unicode 2个字节(生僻字4个) 所有语言 UTF-8 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 所有语言 具体解释: ...
- 回环屏障CyclicBarrier
上一篇说的CountDownLatch是一个计数器,类似线程的join方法,但是有一个缺陷,就是当计数器的值到达0之后,再调用CountDownLatch的await和countDown方法就会立刻返 ...
- vba工程密码清除
EXCEL vba工程密码破解 方法一:这种方法实际是避开VBA工程密码验证,即骗vba编辑器,该密码输入成功,请求放行.不管他是破解还是欺骗 能达到我们的目的角开就行________________ ...
- 爬虫 urllib
内置http请求库 模块 urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 urllib.robotparser ...
- AcWing 891. Nim游戏
//a1 ^ a2 ^ ··· ^ an = 0 –>先手必败: //a1 ^ a2 ^ ··· ^ an != 0 –>先手必胜: #include<iostream> us ...