#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/9/15 下午5:06
# @Author : lb
# @File : sort.py
# @Desc :
import numpy as np
arr = list(np.random.randint(20, size=10))
#arr = [1, 11, 1, 2, 43, 11]
def buble_sort(a):
"""
冒泡排序: 两两比较,每次循环都找到最大的一个放到最右侧
:param a:
:return:
"""
if len(a) < 2:
return a
for i in xrange(len(a)):
for j in xrange(len(a)-i-1):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
return a def sel_sort(a):
"""
选择排序:每次循环都找到剩余的元素中最大的一个,与当前外层循环的位置进行交换
:param a:
:return:
"""
if len(a) < 2:
return a
for i in xrange(len(a)-1):
tmp = a[i]
pos = i
for j in xrange(i+1, len(a)):
if a[j] < tmp:
tmp = a[j]
pos = j
a[i], a[pos] = a[pos], a[i]
return a def ins_sort(a):
"""
插入排序:每次对已经排好的有序数列进行轮训,如果大于监哨,则当前的元素右移n(直接排序时:n=1, 希尔排序时:n=gap)个单位
:param a:
:return:
"""
if len(a) < 2:
return a
for i in xrange(1, len(a)):
tmp = a[i]
j = i
while j - 1 >= 0 and a[j-1] > tmp:
a[j] = a[j-1]
j -= 1
a[j] = tmp return a def shell_sort(a):
"""
希尔排序,改进的插入排序,一次移动gap个元素
:param a:
:return:
"""
if len(a) < 2:
return a
gap = len(a) // 2
while gap > 0:
for i in xrange(gap, len(a)):
tmp = a[i]
j = i
while j >= gap and a[j-gap] > tmp:
a[j] = a[j-gap]
j -= gap
a[j] = tmp
gap //= 2
return a def quick_sort(a):
"""
快速排序:分治原则,设置标准值mid,小于mid的放左侧,大于mid的放右侧,递归实现
:param a:
:return:
"""
if len(a) < 2:
return a
L, R = [], []
mid = a[len(a) // 2]
a.remove(mid)
for i in a:
if i > mid:
R.append(i)
else:
L.append(i)
return quick_sort(L) + [mid] + quick_sort(R) def merge_sort(a):
"""
归并排序,分治原则,将一路归并逐渐抽象到二路归并
:param arr:
:return:
"""
def two_merge(L,R):
index_L = index_R = 0
ret = []
while index_L < len(L) and index_R < len(R):
if L[index_L] < R[index_R]:
ret.append(L[index_L])
index_L += 1
else:
ret.append(R[index_R])
index_R += 1
if index_L == len(L):
ret.extend(R[index_R:])
else:
ret.extend(L[index_L:])
return ret
if len(a) < 2:
return a
mid = len(a) // 2
L = merge_sort(a[:mid])
R = merge_sort(a[mid:])
return two_merge(L, R)

python 基本排序算法的更多相关文章

  1. Python之排序算法:快速排序与冒泡排序

    Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...

  2. python实现排序算法 时间复杂度、稳定性分析 冒泡排序、选择排序、插入排序、希尔排序

    说到排序算法,就不得不提时间复杂度和稳定性! 其实一直对稳定性不是很理解,今天研究python实现排序算法的时候突然有了新的体会,一定要记录下来 稳定性: 稳定性指的是 当排序碰到两个相等数的时候,他 ...

  3. python常见排序算法解析

    python——常见排序算法解析   算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...

  4. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  5. Python实现排序算法之快速排序

    Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它 ...

  6. python 经典排序算法

    python 经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算 ...

  7. Python 实现排序算法

    排序算法 下面算法均是使用Python实现: 插入排序 原理:循环一次就移动一次元素到数组中正确的位置,通常使用在长度较小的数组的情况以及作为其它复杂排序算法的一部分,比如mergesort或quic ...

  8. python——常见排序算法解析

    算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序, ...

  9. python之排序算法

    排序是每个语言都需要学会的,不管是c++.java还是python,套路都是类似的 python中也有自带的排序函数sort,直接使用也可 闲来无事写了几个排序算法,各不相同 1.每次遇到最小的数都交 ...

  10. Python 八大排序算法速度比较

    这篇文章并不是介绍排序算法原理的,纯粹是想比较一下各种排序算法在真实场景下的运行速度. 算法由 Python 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...

随机推荐

  1. 3、pytest中文文档--编写断言

    目录 编写断言 使用assert编写断言 编写触发期望异常的断言 特殊数据结构比较时的优化 为失败断言添加自定义的说明 关于断言自省的细节 复写缓存文件 去使能断言自省 编写断言 使用assert编写 ...

  2. 阿里社招Java面试题总结——面试官分享

    面试题 1.Java中的内存溢出是如何造成的 2.gc的概念,如果A和B对象循环引用,是否可以被GC? 3.Error.Exception和RuntimeException的区别,作用又是什么? 4. ...

  3. java读写文件IO

    package Common.readFile; import Common.tool.User; import com.fasterxml.jackson.databind.ObjectMapper ...

  4. 微信小程序集成腾讯云 IM SDK

    微信小程序集成腾讯云 IM SDK 1.背景 因业务功能需求需要接入IM(即时聊天)功能,一开始想到的是使用 WebSocket 来实现这个功能,然天意捉弄(哈哈)服务器版本太低不支持 wx 协议(也 ...

  5. 最佳内存缓存框架Caffeine

    Caffeine是一种高性能的缓存库,是基于Java 8的最佳(最优)缓存框架. Cache(缓存),基于Google Guava,Caffeine提供一个内存缓存,大大改善了设计Guava's ca ...

  6. 阿里云 centos7 64位搭建JAVA环境-----安装JDK(2)

    mysql安装好以后,把jdk环境配置一下. 首先下载jdk 8,在官网下载. 找到链接 http://download.oracle.com/otn-pub/java/jdk/8u171-b11/5 ...

  7. JVM参数配置及详解 -Xms -Xmx -Xmn -Xss 调优总结

    堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制.32位系统 下,一般限制在1.5G~2G;64为操 ...

  8. HBase 超详细介绍

    1-HBase的安装 HBase是什么? HBase是Apache Hadoop中的一个子项目,Hbase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的DFS工具就可以看到 ...

  9. 常用 JS 函数

    各种业务开发都离不开对数据的处理,然而遇到的很多数据都是不好处理的.这个时候就需要寻求搜索引擎的帮助.这种方法效率是非常低下的,而且根据作者的个性不能保证其对自己的口味.因此这篇文字包含了一份 JS ...

  10. 浅谈DanmakuView

      今天简单介绍一下开源的弹幕引擎---danmakuView   使用之前在build.gradle里面添加下面这一条(目前我使用的工具是AndroidStudio 3.1.2)   impleme ...