python 基本排序算法
#!/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 基本排序算法的更多相关文章
- Python之排序算法:快速排序与冒泡排序
Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...
- python实现排序算法 时间复杂度、稳定性分析 冒泡排序、选择排序、插入排序、希尔排序
说到排序算法,就不得不提时间复杂度和稳定性! 其实一直对稳定性不是很理解,今天研究python实现排序算法的时候突然有了新的体会,一定要记录下来 稳定性: 稳定性指的是 当排序碰到两个相等数的时候,他 ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- Python实现排序算法之快速排序
Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它 ...
- python 经典排序算法
python 经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算 ...
- Python 实现排序算法
排序算法 下面算法均是使用Python实现: 插入排序 原理:循环一次就移动一次元素到数组中正确的位置,通常使用在长度较小的数组的情况以及作为其它复杂排序算法的一部分,比如mergesort或quic ...
- python——常见排序算法解析
算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序, ...
- python之排序算法
排序是每个语言都需要学会的,不管是c++.java还是python,套路都是类似的 python中也有自带的排序函数sort,直接使用也可 闲来无事写了几个排序算法,各不相同 1.每次遇到最小的数都交 ...
- Python 八大排序算法速度比较
这篇文章并不是介绍排序算法原理的,纯粹是想比较一下各种排序算法在真实场景下的运行速度. 算法由 Python 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...
随机推荐
- Python集训营45天—Day02
目录 变量和运算符 1.1 初步介绍 1.2 使用案例 1.3 知识点梳理 1.4 练习 序言:这一章我们将学习变量以及常见的类型,我们将以案例和代码相结合的方式进行梳理,但是其中所有的案例和知识点 ...
- 深入理解three.js中光源
前言: Three.js 是一个封装了 WebGL 接口的非常好的库,简化了 WebGL 很多细节,降低了学习成本,是当前前端开发者完成3D绘图的得力工具,那么今天我就给大家详细讲解下 Three.j ...
- GlusterFs卷类型分析及创建、使用(结合kubernetes集群分析)
引言 本文通过对卷类型的分析对比,来帮助读者选取生产环境最符合服务的挂载存储,命令可结合<glusterfs详解及kubernetes 搭建heketi-glusterfs>进行实验,下面 ...
- Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)
场景 Winform中DevExpress的TreeList的入门使用教程(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- C++ 基础中的基础 ---- 引用
C++ 基础中的基础 ---- 引用 引用的概念:引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量.比如: int n ...
- windows安装mingw和LuaJIT
1,安装mingw64 先下载mingw64压缩包(不建议下载exe安装包,在线安装太慢),地址如下: https://nchc.dl.sourceforge.net/project/mingw-w6 ...
- eclipse下mybatis-generator-config插件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...
- 松软科技课堂:数据库-主键(PrimaryKey)
主键就是一个表中每个数据行的唯一标识.不会有重复值的列才能当主键.一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都要设定主键 主键有两种选用策略:业务主键和逻辑主键.业务主键是使用有业务意 ...
- 解决ie6上碰到的css兼容问题
ie6上css碰到的坑 前两天在给一个项目做东西的时候,碰到一个有意思的项目,是需要兼容ie6,有一些碰到并且解决的问题,给大家写下来,方便大家以后碰到类似的问题哈- 喜欢的话还请点赞! 1.impo ...
- C# 微信接口认证
public void valid() { string echostr = Request.QueryString["echostr"]; if (!string.IsNullO ...