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. 快速排序

  算法描述:       

一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]的值交换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]的值交换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

  图片演示:

  

  

  代码实现:

# 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实现)相关推荐

  1. list 排序_十个必知的排序算法|Python实例系列

    十大排序: 1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶排序10.基数排序 完整代码和注释如下 # -*- coding: UTF-8 -*-# ...

  2. shell sort 最后一列排序_十个必知的排序算法|Python实例系列[1]

    实例内容: 十个必知的排序算法具体代码,并简略的得知每种算法对于不同长度数列的排序时间 十大排序: 1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶 ...

  3. 排序算法python实现_用Python,Java和C / C ++实现的选择排序算法

    排序算法python实现 The Selection Sort Algorithm sorts the elements of an array. In this article, we shall ...

  4. 排序算法python实现_合并排序算法– Java,C和Python实现

    排序算法python实现 Merge sort is one of the most efficient sorting algorithms. It works on the principle o ...

  5. 十大经典排序算法Python版实现(附动图演示)

    来源:大数据DT 本文约5200字,建议阅读10分钟 排序算法是<数据结构与算法>中最基本的算法之一.本文介绍10种常见的内部排序算法,及如何用Python实现. 排序算法可以分为内部排序 ...

  6. python实现五大基本算法_算法基础:五大排序算法Python实战教程

    排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...

  7. python 按条件选择行和列数据_小白学数据结构-排序算法Python(冒泡、选择、快速、希尔等等)...

    排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们通常所说的排序算法往往指的是内部排序算法,即数据 ...

  8. 数据结构十大经典排序算法--Python

    十大经典排序算法 (java实现看这个)https://program.blog.csdn.net/article/details/83785159 名词解释: 1.冒泡排序 2.选择排序 3.插入排 ...

  9. python语言基本排序算法_排序算法(Python)

    参考: <数据结构(Python 语言描述)> - 3.4 基本排序算法.3.5 更快的排序 Tips:为了保持简洁,每个函数都只处理整数列表,并且假设列表不为空. 目录.jpg 术语 1 ...

  10. 排序算法Python实现合辑

    基本排序算法: 1. 选择排序(seletionSort): 搜索整个列表,找到最小项的位置,如果该位置不是列表的第一个位置,算法就交换这两个位置的项.然后,算法回到第二个位置,并重复这个过程. 时间 ...

最新文章

  1. mkfs.ext4 /dev/sdb 与 mkfs.ext4 /dev/sdb1
  2. Scott Mitchell 的ASP.NET 2.0数据教程之二十一:: 实现开放式并发
  3. acme.sh签发Let‘s Encrypt证书
  4. Java黑皮书课后题第6章:6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金。方法头如下所示。编写程序,显示下面表格
  5. mysql死锁影响_MySQL死锁系列-常见加锁场景分析
  6. jwt同一会话_在会话中使用JWT
  7. maya中英文对比_maya中英文对照表
  8. javascript:URL编解码和父子窗口交互
  9. UI设计干货模板|输入框设计临摹素材
  10. 实现机器学习的循序渐进指南IV——逻辑回归
  11. 计算机专业的学生怎么可以连计算机发展史都不知道
  12. 题解 AT934 【完全数】
  13. 计算机打不开菜鸟打印组件,云打印控件常见问题及解决办法(一)
  14. 锋利的jQuery系列一
  15. 诺顿企业版本最新版本14.2安装测试SymantecEndpointProtection_14.2.0_MP1
  16. 使用yq工具合并两个yml文件
  17. 史上最全python常用英语单词,建议收藏
  18. 线程停止(stop/intrrupt)
  19. 计算机防勒索病毒需求分析
  20. vue项目中,使用require动态加载本地图片报错找不到模块

热门文章

  1. 前端笔记(1-20)
  2. 品味ZooKeeper之Watcher机制_2
  3. 物联网给快递业带来新变革
  4. 如何解决Greenplum中无法通过标准命令修复的元数据错误
  5. CSS 设置背景颜色透明,文字不透明
  6. scp 免输入密码的方法
  7. VC下绘图程序Demo
  8. 蓝桥杯 ALGO-66 算法训练 字符串编辑
  9. [Python] L1-014. 简单题-PAT团体程序设计天梯赛GPLT
  10. 专家系统代码实现_前端代码是怎样智能生成的 - 语义化篇