冒泡排序

原理

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。(时间复杂度:O(n^2))

步骤

冒泡排序算法的运作如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
# -*- coding: utf-8 -*- def bubbl_sort(array):l = len(array)#第一次遍历for i in range(l):exchange = False #这是一个tag,主要作用是对冒泡做一个小优化,#当第二次遍历中没有元素交换时,便认为list已经是有序的了#第二次遍历for j in range(i+1,l):if array[i] > array[j]:array[j], array[i] = array[i], array[j]exchange = Trueif not exchange:    #如tag为False则退出breakreturn array

选择排序

原理

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理大致是将后面的元素最小元素一个个取出然后按顺序放置。(时间复杂度:O(n^2))

步骤

  1. 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  3. 重复第二步,直到所有元素均排序完毕。
# -*- coding: utf-8 -*-def select_sort(array):l = len(array)for i in range(l-1):mix_loc = ifor j in range(i+1,l):if array[j] < array[mix_loc]:mix_loc = jarray[i], array[mix_loc] = array[mix_loc], array[i]return array

插入排序

原理

插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。(时间复杂度:O(n^2))

步骤

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5
# -*- coding: utf-8 -*-def insert_sort(array):for i in range(1,len(array)):tmp = array[i]j = i - 1while j >=0 and array[j] > tmp:array[j+1] = array[j]j  = j - 1array[j + 1] = tmpreturn array

快速排序

原理

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。(时间复杂度:O(nlogn))

步骤

  1. 从数列中挑出一个元素,称为”基准”(pivot),

  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

# -*- coding: utf-8 -*-def quick_sort(array,reverse=False):# 使用reverse参数实现对列表的正序和倒序的排序(默认为正序)def sort(array):if len(array) < 2:  #基线条件return arrayelse:pivot = array[0]  #递归条件less = [i for i in array[1:] if i <= pivot]greater = [i for i in array[1:] if i > pivot]return sort(less) + [pivot] + sort(greater)if reverse:return sort(array)[-1::-1]else:return sort(array)

转载于:https://www.cnblogs.com/zhichaoma/p/8157784.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. 一个非常好用的 Python 魔法库
  2. 2020年度「炼丹笔记」搜索推荐系统干货集锦
  3. Java手写Hashmap(HashMap的基本用法)
  4. [算法模板]树状数组
  5. J2EE DAO模式解析(二)
  6. 4. Javascript 函数
  7. R语言 安装包时出现的一个错误
  8. Java中的<>@造型专家_day_16_20210412
  9. voms下的反射大师_VOMS虚拟大师
  10. NLP聊天机器人笔记
  11. Contrastive Loss(对比损失)
  12. c语言五一快乐源码,快乐“五一”
  13. 二、VLAN,单臂路由
  14. System.Drawing.Printing.InvalidPrinterException: 未安装打印机。
  15. 论文阅读 - On the efficacy of old features for the detection of new bots - CCF B
  16. 同时查询京东多个快递物流,并分析中转延误
  17. 华为架构师谈如何理解运用模块与微服务,系统学Java从零开始
  18. MATLAB--数字图像处理 图像噪声与滤波处理
  19. 汽车站车票管理系统(课程作业)
  20. java中的applet的问题

热门文章

  1. 设计模式(三)单实例模式
  2. Sql Server 2005 获取表结构信息
  3. JAVA回形数的实现
  4. 接口测试--apipost变量使用(一)
  5. VMware Centos 网络配置
  6. 02-08 Python库-yaml
  7. webdriver 调用IE 问题
  8. python括号是中文还是英文_python括号区别
  9. 检测到目标主机可能存在缓慢的http拒绝服务攻击_高防服务器能防住哪些攻击?“流量清洗”与它有什么关系?...
  10. 简单的php文件_简单的php文件上传(实例)