主要排序算法(Python实现)
1. 冒泡排序
算法描述:1. 比较相邻的两个数,对升序(/降序)而言,若当前数小于(大于)后一个数则交换两者的位置。
2.那么循环长度为L的列表,从第一个元素到倒数第(L-1)元素进行第1步操作,其结果是第L个元素必定是最小值;也就是说单次循环确定了一个数的排序位置,单次循环次数为(L-1);
3. 要确定所有元素的排序位置,还需要L-1次,因为每次循环确定了一个元素的位置,当第(L-1)次循环时,L-1个元素的位置都被确定了,剩下的一个自然被确定。
图片演示:
代码实现:
# coding:utf-8 import timeitdef bubble_sort(seq:list):"""冒泡排序, seq为有效待排序列表"""for i in range(len(seq)-1):for j in range(len(seq)-1):if seq[j] < seq[j+1]:seq[j], seq[j+1] = seq[j+1], seq[j]return seqif __name__ == '__main__':print(bubble_sort([i for i in range(10)]))# t = timeit.Timer("bubble_sort([i for i in range(1000)])", "from __main__ import bubble_sort")# print(t.timeit())
运行结果:
最优时间复杂度:O(N)
最坏时间复杂度:O(N^2)
稳定性:稳定
2. 选择排序
算法描述:1. 将当前元素与其后所有元素进行比较,若大于(小于)则置换两个元素;
2. 对于长度为L的列表,第1步操作完成能确定一个元素的位置;
3.要确定L个元素的位置,则需循环L-1次;
图片演示:
代码实现:
# coding:utf-8def select_sort(seq:list):"""选择排序(降序)"""for i in range(len(seq)-1):# 暂存待置换的元素的值cur_max = seq[i]for j in range(i+1, len(seq)):if seq[j] > cur_max:cur_max = seq[j]seq[i], seq[j] = seq[j], seq[i]return seqif __name__ == '__main__':print(select_sort([i for i in range(10)]))
最优时间复杂度:O(N^2)
最坏时间复杂度:O(N^2)
稳定性:不稳定
3. 插入排序
算法描述:选择排序的关键在于向后比较,而插入排序与之相反,是向前比较并调整相应元素位置;
1. 对于列表长度为L的列表而言,循环从第N个数开始向前与第N-1进行比较,若大于(小于)则交换位置;
2. 要实现所有的数排序,另加一层L-1次的循环;
图片演示:
代码实现:
# coding:utf-8def insert_sort(seq:list):"""插入排序(降序)"""for i in range(len(seq)):for j in range(i, 0, -1):# 倒序交换相邻两个的取值if seq[j] > seq[j-1]:seq[j], seq[j-1] = seq[j-1], seq[j]return seqif __name__ == '__main__':print(insert_sort([i for i in range(10)]))
最优时间复杂度:O(N)
最坏时间复杂度:O(N^2)
稳定性:稳定
4. 快速排序
算法描述:
图片演示:
代码实现:
# coding:utf-8def fast_sort(seq:list, left, right):"""快速排序(升序):param left:左部起始位置:param right: 右部起始位置"""if right<=left:returnlow = lefthigh = right# 基准值mid = seq[left]while low < high:# 从右扫描找出小于基准值的数while low<high and seq[high]>mid:high -= 1seq[low] = seq[high]# 向左扫描找出大于基准值的数while low<high and seq[low]<=mid:low += 1seq[high] = seq[low]# 此时low=high, 确定了基准值在序列中的排序位置seq[low] = mid# 递归排序low左右两边的序列fast_sort(seq, low+1, right)fast_sort(seq, left, low-1)if __name__ == '__main__':seq = [i for i in range(10,0,-1)]fast_sort(seq, 0, len(seq)-1)print(seq)
最优时间复杂度:O(NlogN)
最坏时间复杂度:O(N^2)
稳定性:不稳定
5. 希尔排序
算法描述:
希尔排序是对插入排序的一种优化,主要在于设置了以步长来比较两个元素的值;
1.
图片演示:
代码实现:
最优时间复杂度:O(NlogN)
最坏时间复杂度:O(N^2)
稳定性:不稳定
转载于:https://www.cnblogs.com/kisun168/p/11336051.html
主要排序算法(Python实现)相关推荐
- list 排序_十个必知的排序算法|Python实例系列
十大排序: 1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶排序10.基数排序 完整代码和注释如下 # -*- coding: UTF-8 -*-# ...
- shell sort 最后一列排序_十个必知的排序算法|Python实例系列[1]
实例内容: 十个必知的排序算法具体代码,并简略的得知每种算法对于不同长度数列的排序时间 十大排序: 1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶 ...
- 排序算法python实现_用Python,Java和C / C ++实现的选择排序算法
排序算法python实现 The Selection Sort Algorithm sorts the elements of an array. In this article, we shall ...
- 排序算法python实现_合并排序算法– Java,C和Python实现
排序算法python实现 Merge sort is one of the most efficient sorting algorithms. It works on the principle o ...
- 十大经典排序算法Python版实现(附动图演示)
来源:大数据DT 本文约5200字,建议阅读10分钟 排序算法是<数据结构与算法>中最基本的算法之一.本文介绍10种常见的内部排序算法,及如何用Python实现. 排序算法可以分为内部排序 ...
- python实现五大基本算法_算法基础:五大排序算法Python实战教程
排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...
- python 按条件选择行和列数据_小白学数据结构-排序算法Python(冒泡、选择、快速、希尔等等)...
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们通常所说的排序算法往往指的是内部排序算法,即数据 ...
- 数据结构十大经典排序算法--Python
十大经典排序算法 (java实现看这个)https://program.blog.csdn.net/article/details/83785159 名词解释: 1.冒泡排序 2.选择排序 3.插入排 ...
- python语言基本排序算法_排序算法(Python)
参考: <数据结构(Python 语言描述)> - 3.4 基本排序算法.3.5 更快的排序 Tips:为了保持简洁,每个函数都只处理整数列表,并且假设列表不为空. 目录.jpg 术语 1 ...
- 排序算法Python实现合辑
基本排序算法: 1. 选择排序(seletionSort): 搜索整个列表,找到最小项的位置,如果该位置不是列表的第一个位置,算法就交换这两个位置的项.然后,算法回到第二个位置,并重复这个过程. 时间 ...
最新文章
- mkfs.ext4 /dev/sdb 与 mkfs.ext4 /dev/sdb1
- Scott Mitchell 的ASP.NET 2.0数据教程之二十一:: 实现开放式并发
- acme.sh签发Let‘s Encrypt证书
- Java黑皮书课后题第6章:6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金。方法头如下所示。编写程序,显示下面表格
- mysql死锁影响_MySQL死锁系列-常见加锁场景分析
- jwt同一会话_在会话中使用JWT
- maya中英文对比_maya中英文对照表
- javascript:URL编解码和父子窗口交互
- UI设计干货模板|输入框设计临摹素材
- 实现机器学习的循序渐进指南IV——逻辑回归
- 计算机专业的学生怎么可以连计算机发展史都不知道
- 题解 AT934 【完全数】
- 计算机打不开菜鸟打印组件,云打印控件常见问题及解决办法(一)
- 锋利的jQuery系列一
- 诺顿企业版本最新版本14.2安装测试SymantecEndpointProtection_14.2.0_MP1
- 使用yq工具合并两个yml文件
- 史上最全python常用英语单词,建议收藏
- 线程停止(stop/intrrupt)
- 计算机防勒索病毒需求分析
- vue项目中,使用require动态加载本地图片报错找不到模块