#!/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. mybatis 批量插入时候的一个注意点

    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys=&quo ...

  2. JavaScript 基础入门

    JavaScript 基础入门   JavaScript 的组成 JS 由三部分组成,它们分别是:ECMAScript.DOM.BOM. ECMAScript     因为网景开发了JavaScrip ...

  3. 42 (OC)* 字典实现原理--哈希原理

    一.NSDictionary使用原理 1.NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的,hash函数设计的好坏影响着数据的查找访问效率. - (void ...

  4. Docker常用命令小记

    除了基本的docker pull.docker image.docker ps,还有一些命令及参数也很重要,在此记录下来避免遗忘. 环境信息 以下是本次操作的环境: 操作系统:CentOS Linux ...

  5. Python连载39-生成器、next函数、yield返回值

    ​一.生成器 1.定义(generator):一边循环一边计算下一个元素的机制/算法 2.满三个条件 (1)每次调用都能产生出for循环需要的下一个元素 (2)如果达到最后一个后,能够爆出StopIt ...

  6. hadoop集群zookeeper迁移

    1. zookeeper作用 ZooKeepr在Hadoop中的应用主要有: 1.1 HDFS中NameNode的HA和YARN中ResourceManager的HA. 1.2 存储RMStateSt ...

  7. java自学小测试 九九乘法表

    public class Ninenine { public static void main(String[] args) { for(int i=1;i<=9;i++){ for(int j ...

  8. python 数据分析师

    简介 越来越多的政府机关.企事业单位将选择拥有数据分析师资质的专业人士为他们的项目做出科学.合理的分析.以便正确决策:越来越多的风险投资机构把数据分析师所出具的数据分析报告作为其判断项目是否可行及是否 ...

  9. 记一次Burp Suite的使用实例

       下载完的Bur是这样的,双击jar即可 最右边的键一直按,傻瓜式         先将要抓包的网页打开,此次以上传图片为例     第一步当然是先下载Burp Suite之后打开,查看设置代理地 ...

  10. 在Debian上用FVWM做自己的桌面

    用FVWM做自己的桌面 Table of Contents 1. 前言 2. 学习步骤 3. 准备 3.1. 软件包 3.2. 字体 3.3. 图片 3.4. 参考资料 4. 环境 5. 布局 6. ...