冒泡排序

冒泡法:第一趟:相邻的两数相比,大的往下沉。最后一个元素是最大的。

第二趟:相邻的两数相比,大的往下沉。最后一个元素不用比。

  1. #冒泡排序
  2. array = [1,5,6,2,9,4,3]
  3. def bubble_sort(array):
  4. for i in range(len(array)-1):
  5. for j in range(len(array)-i-1):
  6. if array[j] > array[j+1]:
  7. array[j],array[j+1] = array[j+1],array[j]
  8. return array
  9.  
  10. bubble = bubble_sort(array)
  11. print(bubble)

时间复杂度:O(n^2)

稳定性:稳定

改进:如果一趟比较没有发生位置变换,则认为排序完成

  1. array = [1,2,3,5,7]
  2. def bubble_sort(array):
  3. for i in range(len(array)-1):
  4. flag = 1 #建立标志位
  5. for j in range(len(array)-i-1):
  6. if array[j] > array[j+1]:
  7. array[j],array[j+1] = array[j+1],array[j]
  8. flag = 0
  9. if not flag:
  10. break
  11. return array
  12.  
  13. bubble = bubble_sort(array)
  14. print(bubble)

直接选择排序

选择排序法:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,直到全部排完。

  1. def select_sort(array):
  2. for i in range(len(array)-1):
  3. min = i
  4. for j in range(i+1, len(array)):
  5. if array[j] < array[min]:
  6. min = j
  7. array[i], array[min] = array[min], array[i]
  8. return array
  9.  
  10. array = [1,5,6,2,9,4,3]
  11. select = select_sort(array)
  12. print(select)

直接插入排序

列表被分为有序区和无序区两个部分。最初有序区只有一个元素。
每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
其实就相当于摸牌:

  1. def insert_sort(array):
  2. # 循环的是第二个到最后(待摸的牌)
  3. for i in range(1, len(array)):
  4. # 待插入的数(摸上来的牌)
  5. min = array[i]
  6. # 已排好序的最右边一个元素(手里的牌的最右边)
  7. j = i - 1
  8. # 一只和排好的牌比较,排好的牌的牌的索引必须大于等于0
  9. # 比较过程中,如果手里的比摸上来的大,
  10. while j >= 0 and array[j] < min:
  11. # 那么手里的牌往右边移动一位,就是把j付给j+1
  12. array[j+1] = array[j]
  13. # 换完以后在和下一张比较
  14. j -= 1
  15. # 找到了手里的牌比摸上来的牌小或等于的时候,就把摸上来的放到它右边
  16. else:array[j+1] = min
  17. return array
  18.  
  19. list=[5,6,1,2,8,3,4]
  20. print(insert_sort(list))

python排序(冒泡、直接选择、直接插入等)的更多相关文章

  1. Python排序算法之选择排序定义与用法示例

    Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...

  2. 《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入

    好几天又没写,因为这几天很闲,平时忙的时候自己再累都不会睡着,但是呢这没事了,照理说应该是不瞌睡了,结果还睡着了. 所以说,人很贱.也验证了一句话,没有目标的人其实最无聊.人一定要有自己的工作,这工作 ...

  3. python基础:冒泡和选择排序算法实现

    冒泡排序和选择排序   首先引用一下百度百科对于冒泡算法的定义:   冒泡排序算法的原理如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾 ...

  4. 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)

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

  5. 使用python实现冒泡、选择、插入基础排序

    冒泡排序 依次比较相邻两元素,若前一元素大于后一元素则交换之,直至最后一个元素即为最大: 然后重新从首元素开始重复同样的操作,直至倒数第二个元素即为次大元素: 依次类推.如同水中的气泡,依次将最大或最 ...

  6. Python实现冒泡,选择排序

    def bubble(num): for i in range(len(num)-1): for j in range(len(num)-i-1): if(num[j]>num[j+1]): t ...

  7. c++ 排序 冒泡 插入 选择 快速

    //冒泡 #include <iostream> using namespace std; void bubbleSort(int* list,int index) { ;i--) //i ...

  8. java面试准备之基础排序——冒泡与选择排序

    选择排序:     [java]    public void select(int[] arr){            for(int i=0;i<arr.length;i++){      ...

  9. python排序算法的实现-选择

    1.算法: 对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换: 然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与K2对换 ...

随机推荐

  1. NetScaler VPX在Azure上的部署(二)

    本文是Citrix的工程师协助完成.主要是Citrix的VPX的配置. 导入License   进入NetScaler 中点击管理许可   导入后将有提示,请确认重启.   配置Azure HA 由于 ...

  2. JVM体系结构之二:类加载器

    一.概述 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型.类加载和连接的过程都是在运行期间完成的. 二. 类的加载 ...

  3. ETL之Tungsten Replicator

    1 概述 1.1 介绍 Tungsten Replicator是数据库集群和复制供应商Continuent推出的高性能.开源的数据复制引擎,是Continuent最先进的集群解决方案的核心组件之一,特 ...

  4. Less:Less(CSS预处理语言)

    ylbtech-Less:Less(CSS预处理语言) Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题 ...

  5. [快手(AAuto)学习笔记]如何让程序在运行时请求管理员权限(UAC)

    作者:ffsystem 作为(糟糕的)程序猿,习惯写代码解决一些简单事务.正常用批处理就能解决大部分工作,复杂一点用AutoIt 3. 有时候要分发给别人,就需要一个界面.外行你程序写得如何他看不懂, ...

  6. mybatis---demo1--(缓存)----bai

    News-mapper.xml 配置: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...

  7. 1.Apache+Tomcat负载均衡+集群配置

    1.本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是 ...

  8. Ubuntu 切换root用户是时出现su Authentication failure

    su root 时出现错误su Authentication failure 原因是没有给root用户设置密码 sudo passwd root

  9. Java探索之旅(15)——包装类和字符类

    1.包装类 ❶出于对性能的考虑,并不把基本数据类型作为对象使用,因为适用对象需要额外的系统花销.但是某些Java方法,需要对象作为参数,例如数组线性表ArrayList.add(Object).Jav ...

  10. css+div制作圆角矩形的四种方法

    圆角矩形一向是设计师最倾心的一种设计,因为他们可以让整个网页生动起来,不那么死板,所以,作为一个优秀的网页设计师,学会一种或多种编辑圆角矩形的方法是必不可少的,而且圆角矩形应用范围极广,一个网页内的所 ...