基本排序算法:Python实现
基本排序算法,包括冒泡排序,插入排序,选择排序,堆排序,快速排序等。
【冒泡排序】
复杂度是n*n
#coding:utf8
#author:HaxtraZ
#description:冒泡排序 def bubblesort1(a):
#每次找到一个最小元素,放到数组首部
n=len(a)
for i in range(0,n-1):
swapped=False
for j in range(n-1,i,-1):
if a[j]<a[j-1]:
a[j],a[j-1]=a[j-1],a[j]
swapped=True
if not swapped: break def bubblesort2(a):
#这个版本的解释,在谭浩强C++2004版P137
#每次找到一个最大元素并放到数组末尾
#边界处做了优化
n=len(a)
for i in range(0,n-1):
swapped=False
for j in range(0, n-i-1):
if a[j]>a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
swapped=True
if not swapped: break def bubblesort3(a):
#这个版本来自维基百科
#外层循环本来有点问题的,如果是range(len(a)-1,1,-1)
#那么当输入数据为3,5,1时,结果不正确
#当然,维基百科上这个错误我已经修改过了。
for j in range(len(a)-1, 0, -1):
for i in range(0, j):
if a[i]>a[i+1]:
a[i],a[i+1]=a[i+1],a[i]
【插入排序】
复杂度是n*n
#coding:utf8
#author:HaxtraZ def insertion_sort1(a):
#线性插入排序
for j in range(1, len(a)):
key = a[j]
i = j - 1
while i>=0 and a[i]>key:
a[i+1] = a[i]
i = i-1
a[i+1] = key def binInsertSort(a):
#二分插入排序
n = len(a)
for j in range(1, n):
key = a[j]
i = j - 1 if key > a[i]:
continue
l, r = 0, i
while l <= r:
#print l, r
mid = (l + r) / 2
if key < a[mid]:
r = mid - 1
else:
l = mid + 1
k = j
while k > l:
a[k] = a[k - 1]
k = k - 1 a[l] = key
【选择排序】
复杂度是n*n
#coding:utf8
#author:HaxtraZ
#description:选择排序 def selectsort1(a):
#每次找最小元素
n=len(a)
for i in range(0, n-1):
for j in range(i+1, n):
minpos=i #minpos用于记录最小元素的下标
if a[j]<a[minpos]:
minpos=j
#如果在这里就交换a[j]和a[minpos],那就是bubblesort if minpos!=i:
a[minpos],a[i]=a[i],a[minpos] def selectsort2(a):
#每次找最大元素
n=len(n)
for i in range(n-1, 0, -1):
maxpos=0
for j in range(1, i+1):
if a[j]>a[maxpos]:
maxpos=j if maxpos!=i:
a[i],a[maxpos]=a[maxpos],a[i]
【堆排序】
复杂度是nlogn
#coding:utf8
#author:HaxtraZ
#description:堆排序
#修改自《算法导论》2nd Edition def LEFT(i):
return 2*i+1 def RIGHT(i):
return 2*i+2 def PARENT(i):
return (i-1)/2 def MAX_HEAPIFY(a,i,heapsize):
l=LEFT(i)
r=RIGHT(i)
if l<heapsize and a[l]>a[i]:
largest=l
else:
largest=i if r<heapsize and a[r]>a[largest]:
largest=r if largest!=i:
a[i],a[largest]=a[largest],a[i]
MAX_HEAPIFY(a,largest,heapsize) def BUILD_MAX_HEAP(a):
heapsize=len(a)
i=PARENT(len(a)-1)
while i>=0:
MAX_HEAPIFY(a,i,heapsize)
i -= 1 def HEAP_SORT(a):
BUILD_MAX_HEAP(a)
n=len(a)
heapsize=n
for i in range(n-1, 0, -1):
a[0],a[i]=a[i],a[0]
heapsize-=1
MAX_HEAPIFY(a,0,heapsize) a=[1,3,2,4,8,6,22,9]
HEAP_SORT(a)
print a
【快速排序】
复杂度是nlogn
#coding:utf8
#version1
'''参考自http://interactivepython.org/courselib/static/pythonds/SortSearch/sorting.html''' def quickSort(alist):
quickSortHelper(alist,0,len(alist)-1) def quickSortHelper(alist,first,last):
if first<last: splitpoint = partition(alist,first,last) quickSortHelper(alist,first,splitpoint-1)
quickSortHelper(alist,splitpoint+1,last) def partition(alist,first,last):
pivotvalue = alist[first] leftmark = first+1
rightmark = last done = False
while not done: while leftmark <= rightmark and \
alist[leftmark] <= pivotvalue:
leftmark = leftmark + 1 while alist[rightmark] >= pivotvalue and \
rightmark >= leftmark:
rightmark = rightmark -1 if rightmark < leftmark:
done = True
else:
temp = alist[leftmark]
alist[leftmark] = alist[rightmark]
alist[rightmark] = temp temp = alist[first]
alist[first] = alist[rightmark]
alist[rightmark] = temp return rightmark alist = [54,26,93,17,77,31,44,55,20]
quickSort(alist)
print(alist)
基本排序算法:Python实现的更多相关文章
- 常见排序算法-Python实现
常见排序算法-Python实现 python 排序 算法 1.二分法 python 32行 right = length- : ] ): test_list = [,,,,,, ...
- 三种排序算法python源码——冒泡排序、插入排序、选择排序
最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...
- 排序算法-python版
总结了一下常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成 ...
- 十大经典排序算法(Python,Java实现)
参照:https://www.cnblogs.com/wuxinyan/p/8615127.html https://www.cnblogs.com/onepixel/articles/7674659 ...
- 排序算法 python实现
一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两 ...
- 基本排序算法[python实现]
冒泡排序 原理 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...
- 九大常用排序算法 python
1.冒泡排序 import random from timewrap import * @cal_time def bubble_sort(li): for i in range(len(li)-1) ...
- 八大排序算法python实现
一.概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当 ...
- [数据结构与算法]排序算法(Python)
1.直接插入排序 给定一个数组后,从第二个元素开始,如果比第一个小,就跟他交换位置,否则不动:第三个元素如果比第二个小,把第三个跟第二个交换位置,在把第二个与第一个比较:..... def inser ...
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们通常所说的排序算法往往指的是内部排序算法,即数据 ...
随机推荐
- get client machine name
System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName;
- 【Hibernate步步为营】--继承映射具体解释
上篇文章讨论了多对多映射,在使用多对多映射时重点是使用<many-to-many>标签,并在标签的两端加入外键这样在生成关系时会创建两个关系之间的关系表,通过关系表来维护它们之间的关系,另 ...
- 数字信号处理Day2-小波基与规范正交化
我们有这么一张灰度图64*64 我们能够定义出4096个基,各自是某一位是0其它是1,在这样的情况下,假设我们传输图片,那么就相当于传输原始数据 如果传到一半,网络坏了. 于是,我们得到 我们能够计算 ...
- LaTex希腊字母
Name Symbol Command Alpha $\alpha$ $A$ \alpha A Beta $\beta$ $B$ \beta B Gamma $\gamma$ $\Gamma$ \ga ...
- [转] 用source命令执行脚本和用sh执行脚本之间的区别
from: http://blog.csdn.net/david_xtd/article/details/8012627 问题: 有很多方式可以执行脚本, 1).source test.bsh 2). ...
- 如何完全退出android应用程序
当一个android应用程序包含多个activity时,要完全退出android应用程序,便要销毁掉所有的activity,下面是一种网上流传的比较经典完美的方法: 首先要定义一个继承Applicat ...
- /dev/null 文件
/dev/null 文件 如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null: $ command > /dev/null /dev/null 是一 ...
- JS和利用openssl的object C加密得到相同的aes加密密文
这是之前接到的一个工作内容,项目原本的登录操作是获得账号和密码以后,对密码进行一遍MD5加密,然后传递账号和密文到cgi文件.在c中获取到账户以后,从数据库中获取到密码,对密码进行一次MD5的加密,然 ...
- 在PHP中使用CURL,“撩”服务器只需几行——php curl详细解析和常见大坑
在PHP中使用CURL,"撩"服务器只需几行--php curl详细解析和常见大坑 七夕啦,作为开发,妹子没得撩就"撩"下服务器吧,妹子有得撩的同学那就左拥妹子 ...
- 95秀-自定义对话框 dialog 合集
普通的确认对话框 NormalDialog.java import android.app.Dialog; import android.content.Context; import android ...