快速排序

基本思想是:从一个数组中随机选出一个数N,通过一趟排序将数组分割成三个部分,1、小于N的区域 2、等于N的区域 3、大于N的区域,然后再按照此方法对小于区的和大于区分别递归进行,从而达到整个数据变成有序数组。

#实现第一次排序,之后使用递归方法完成以后的排序
def quick_sort(list,start,end):
left = start
right = end
key = list[left]#找到一个关键数字,一般为第一个元素
while left < right:
#从最后一个元素开始向前与关键字key比较直到left=right 或右边的数字小于关键字为止
while left < right and list[right] >= key:
right -=1
list[left],list[right] = list[right],list[left]
#从左边的第一个元素开始向后域关键字比较直到left=right 或左边的数字大于关键字为止
while left < right and list[left] <= key:
left +=1
list[left], list[right] = list[right], list[left]
return list
list = [6,2,7,3,9,8]
print(quick_sort(list,0,len(list)-1))
————————————————————————————————
def quick_sort(list,start,end):
left = start
right = end
if left <right:
key = list[left]#找到一个关键数字,一般为第一个元素
while left < right:
#从最后一个元素开始向前与关键字key比较直到left=right 或右边的数字小于关键字为止
while left < right and list[right] >= key:
right -=1
list[left],list[right] = list[right],list[left]
#从左边的第一个元素开始向后域关键字比较直到left=right 或左边的数字大于关键字为止
while left < right and list[left] <= key:
left +=1
list[left], list[right] = list[right], list[left]
#将列表中关键字的地方左右分为两组
quick_sort(list,start,left-1)#左边的分组
quick_sort(list,right+1,end)#右边的分组
return list
list = [6,2,7,3,9,8]
print(quick_sort(list,0,len(list)-1))

插入排序

插入排序的基本操作就是将一个数据插入到已经排序好的有序数据中,从而得到一个新的,个数加一的有序数据,算法适用于少量数据的排序

有一个已经有序的序列,要求在这个已经排好的数据序列中插入一个数,要求插入后数据序列仍然有序,此时使用插入排序

插入排序的的步骤

  1、从第一个元素开始,该元素认为是已经排序好的

  2、取出下一个元素,在已经排序好的元素序列中从后向前扫描

  3、如果该元素(已经排序好的)大于新元素则将该元素移到下一位置

  4、重复步骤3,直到找到已经排好的元素小于或等于该元素为止

  5、将新元素插入到下一位置中

  6、重复2~5的步骤

def insert_sort(list):
#循环次数
for i in range(1,len(list)):
#确定关键数字
key = list[i]
j = i-1
while j >=0 and list[j] > key:
# 如果该元素(已经排序好的)大于新元素(key)则将该元素移到下一位置
list[j+1] = list[j]
j-=1
#将该元素(key)插入到下一个位置中
list[j+1] = key
return list
list = [4,5,25,74,1,3,4,]
print(insert_sort(list))

python_排序的更多相关文章

  1. python_如何对字典进行排序?

    案例: 某班英语成绩以字典的形式存储为: {'lili':78, 'jin':50, 'liming': 30, ......} 依据成绩高低,进行学生成绩排名 如何对字典排序? 方法1: #!/us ...

  2. Python_每日习题_0005_三数排序

    # 题目: # 输入三个整数x,y,z,请把这三个数由大到小输出. # 程序分析: 练练手就随便找个排序算法实现一下,偷懒就直接调用函数. #方法一:排序 raw = [] for i in rang ...

  3. python_选择排序

    #选择排序 def insert_sort(li): for i in range (1,len(li)): # i表示摸到牌的下标 tem = li[i] j = i - 1 # j 是初始手中的牌 ...

  4. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  5. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  6. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  7. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  8. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  9. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

随机推荐

  1. 学习笔记51_MongoDB使用

    MongoDB的包: 例如:设置Mongodb端口 在命令行: F:\MongoDB>mongod.exe --port:3306 做集群: 安装和使用: 1.在服务中添加MongoDB ( 指 ...

  2. 如何将excel文件导入testlink

    Step 1 按照excel模板设计测试用例,其中优先级的定义为: 数值 定义 1 LOW 2 MEDIUM 3 HIGH Step 2 执行脚本,将excel转换成xml: 脚本 备注 包含:exc ...

  3. CSPS模拟 57

    rank4大众rank T1 天空龙 让他自由翱翔吧 T2 巨神兵 对于n=10的测试点本可以打出非常优秀的分层状压 但是没有打出来,因为对拓扑图理解不够深刻,纠结于指回的边,实际上只关注伸出的边就可 ...

  4. 关于css布局的一点记录

    1 关于css实现水平垂直居中的一些方法: .css的定位:用margin,padding,position position:absolute;   //绝对定位,一般父级元素采用relative来 ...

  5. 使用Typescript重构axios(二十)——请求取消功能:实现第一种使用方式

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  6. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  7. 单元测试JUnit案例

    被测试模块 package packagedemo; public class Largest { public int minimal(int [] array1) { int index = 0 ...

  8. Graphviz 画图的一些总结

    Graphviz Graphviz 是一个自动排版的作图软件,可以生成 png pdf 等格式. 一切以官方文档为准,博客只是参考.这里做一个自己学习的记录. dot 语法介绍 部分图形属性介绍 示例 ...

  9. SQL的四种连接(左外连接、右外连接、内连接、全连接)

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...

  10. 自动安装 linux 系统

    实现自动安装 centos 6 和 centos 7 实现自动安装 Linux 系统需要在虚拟机上安装三个服务:apache .tftp.dhcp 三个服务放在一台虚拟机上即可 一.DHCP 服务器的 ...