经典排序的python实现
具体原理我这里就不解释了,可以查看数据结构课本或者百度百科
这里只给出相应的代码(很简洁) 1 __author__ = "WSX"
class sort:
def __init__(self,):
pass def merger(self, left , right): # 合并两个有序列表
i = 0; j = 0 ; result = []
while left and right:
if left[i] <= right[j]:
result.append(left.pop(0))
else:
result.append(right.pop(0))
result += left[:]
result += right[:]
return result def mergeSort(self, L): #归并排序
if len(L) == 1:
return L
mid = len(L) // 2
left = self.mergeSort(L[:mid])
right = self.mergeSort(L[mid:])
return self.merger(left, right) def insert1(self, L): #直接插入排序 俩个for实现
for i in range(1,len(L)):
temp = L[i]
for j in range(i-1,-1,-1):
if L[i] < L[j]:
L[j+1] = L[j]
else:
j += 1
break
L[j] = temp
return L def insert2(self, L): #直接插入排序 for 结合 while
for i in range(1, len(L)):
temp = L[i]
j = i-1
while j >=0 and temp < L[j]:
L[j+1] = L[j]
j -= 1
L[j+1] = temp
return L def bubblk(self, L): #冒泡排序
for i in range(len(L)-1):
for j in range(len(L)-i-1):
if L[j+1] < L[j]:
L[j+1], L[j] = L[j], L[j+1]
return L def quickSort1(self,L): #快速排序
if len(L) <= 1:
return L
else:
return self.quickSort1([i for i in L[1:] if i < L[0]]) + [L[0]] + self.quickSort1([j for j in L[1:] if j > L[0]]) def shellSort(self, L):
pass def selectSort(self, L): #选择排序
for i in range(len(L) -1 ):
index = i
for j in range(i+1, len(L)):
if L[j] < L[index]:
index = j
L[index], L[i] = L[i] ,L[index]
return L def sortHeap(self,L): #堆排序
def heap(L, size, root):
larger = root
left = 2 * root + 1;
right = 2 * root + 2
if left < size and L[left] > L[larger]:
larger = left
if right < size and L[right] > L[larger]:
larger = right
if larger != root:
L[larger], L[root] = L[root], L[larger]
heap(L, size, larger) def bulidHeap(L): # 初始化堆
heapsize = len(L)
for i in range(heapsize // 2, -1, -1):
heap(L, heapsize, i) bulidHeap(L)
for i in range(len(L) - 1, -1, -1):
L[0], L[i] = L[i], L[0]
heap(L, i, 0)
return L a = sort()
print(a.sortHeap([25,3,9,7,55,96]))
经典排序的python实现的更多相关文章
- 十大经典排序算法(Python,Java实现)
参照:https://www.cnblogs.com/wuxinyan/p/8615127.html https://www.cnblogs.com/onepixel/articles/7674659 ...
- 经典排序方法 python
数据的排序是在解决实际问题时经常用到的步骤,也是数据结构的考点之一,下面介绍10种经典的排序方法. 首先,排序方法可以大体分为插入排序.选择排序.交换排序.归并排序和桶排序四大类,其中,插入排序又分为 ...
- 经典排序算法总结与实现 ---python
原文:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/ 经典排序算法在面试中占有很大的比重,也是基础,为了未雨绸缪,在寒假里整理并用P ...
- 经典排序算法及python实现
今天我们来谈谈几种经典排序算法,然后用python来实现,最后通过数据来比较几个算法时间 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据 ...
- 十大经典排序算法(python实现)(原创)
个人最喜欢的排序方法是非比较类的计数排序,简单粗暴.专治花里胡哨!!! 使用场景: 1,空间复杂度 越低越好.n值较大: 堆排序 O(nlog2n) O(1) 2,无空间复杂度要求.n值较大: 桶排序 ...
- 经典排序算法的总结及其Python实现
经典排序算法总结: 结论: 排序算法无绝对优劣之分. 不稳定的排序算法有:选择排序.希尔排序.快速排序.堆排序(口诀:“快速.选择.希尔.堆”).其他排序算法均为稳定的排序算法. 第一趟排序后就能确定 ...
- python 经典排序算法
python 经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算 ...
- 经典排序算法及总结(python实现)
目录 1.排序的基本概念和分类 排序的稳定性: 内排序和外排序 影响内排序算法性能的三个因素: 根据排序过程中借助的主要操作,可把内排序分为: 按照算法复杂度可分为两类: 2.冒泡排序 BubbleS ...
- python实现十大经典排序算法
Python实现十大经典排序算法 代码最后面会给出完整版,或者可以从我的Githubfork,想看动图的同学可以去这里看看: 小结: 运行方式,将最后面的代码copy出去,直接python sort. ...
随机推荐
- 169. Majority Element 出现次数超过n/2的元素
[抄题]: Given an array of size n, find the majority element. The majority element is the element that ...
- Hamming Distance二进制距离
[抄题]: The Hamming distance between two integers is the number of positions at which the correspondin ...
- mac上,sudo启动IDEA
cd /Applications/IntelliJ IDEA 14.app/Contents/MacOS sudo ./idea # 就是这个启动,我一开始没有找到这个启动项...这样你就能运行80端 ...
- code1074 食物链
开3*n的并查集,其中x用来连接与x同类的,x+n用来连接x吃的,x+2*n用来连接x被吃的. 1 x y时,如果 x吃y 或 x被y吃,那么为假话, 否则x与y同类,x吃的y也吃,x被吃的y也被吃: ...
- [Training Video - 4] [Groovy] Object equality and variable equality check
def x=2 def y=3 if(x == y){ log.info "equal" }else{ log.info "not equal" // prin ...
- Hibernate环境搭建
Hibernate的环境搭建,主要步骤分为一下四步: 首先创建一个工程,在工程里创建一个实体类User,在这个实体类中必须包含无参的构造器,和这个类对属性的存取方法(getter and setter ...
- js实现水平伸缩菜单
window.onload=function(){ var aA=document.getElementsByTagName('a'); for(var i=0; i<aA.length; i+ ...
- 敏捷开发之XP
敏捷方法论有一个共同的特点,那就是都将矛头指向了“文档”,它们认为传统的软件工程方法文档量太“重”了,称为“重量级”方法,而相应的敏捷方法则是“轻量级”方法.正是因为“轻量级”感觉没有什么力量,不但不 ...
- 在word上写博客直接发到CSDN
目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...
- 学习python2
字符串遍历 列表遍历 元组遍历 字典遍历 <1> 遍历字典的key(键) <2> 遍历字典的value(值) <3> 遍历字典的项(元素) <4> 遍历 ...