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 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...
随机推荐
- 实现一个简易版的vuex持久化工具
背景 最近用uni-app开发小程序项目时,部分需要持久化的内容直接使用vue中的持久化插件貌似不太行,所以想着自己实现一下类似vuex-persistedstate插件的功能,想着功能不多,代码量应 ...
- Visual Studio 调试 —— 附加到进程(远程服务器)
一般在部署环境下不会有 Visual Studio 开发工具的,所以需要有 Remote Debugger(远程调试器) 才可以进行远程调试. Remote Debugger 获取 方法一:Visua ...
- 从零开始开发IM(即时通讯)服务端(二)
好消息:IM1.0.0版本已经上线啦,支持特性: 私聊发送文本/文件 已发送/已送达/已读回执 支持使用ldap登录 支持接入外部的登录认证系统 提供客户端jar包,方便客户端开发 github链接: ...
- Docker 学习线路
起因 之前的几篇博客,需要一定的docker知识(虽然可以直接上手),但是对于没有docker基础的人来说是不知道为什么要这样做的. 我把之前学习docker的步骤整理出来,希望可以帮助更多的人去学习 ...
- python串口工具的使用!!!!一定要加timeout=!!!!
不指定timeout参数的话,就各种报错,如下: 而前面的串口,波特率则不需要指明.
- 我的JS文件
{ "squadName" : "林宥嘉", "homeTown" : "1987年7月1日(农历六月初六)", ...
- java8 把List<Object> 根据某字段去重
import java.util.ArrayList;import java.util.List;import org.apache.shiro.SecurityUtils;import org. ...
- ckeditor中 config.js等通过ckeditor.js引入文件手动修改方法
因为除了ckeditor.js之外的引用文件是通过ckeditor.js自动添加<script>或<link>标签实现文件的引入,引入的根目录是展示页面的地址.有时需要手动修改 ...
- oracle 常用脚本以及语句
oracle 常用脚本以及语句 一.oracle 安装10G 单机初始化环境: #!/bin/bash #关闭selinuxsed -i 's\SELINUX=enforcing\SELINUX=di ...
- 06: RGB、YUV和HSV颜色空间模型
RGBA是代表Red(红色)Green(绿色)Blue(蓝色)和Alpha的色彩空间 YUV:Y"表示明亮度(Luminance或Luma),也就是灰阶值:而"U"和&q ...