经典排序的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. ...
随机推荐
- Python中super详解
转至:https://mozillazg.com/2016/12/python-super-is-not-as-simple-as-you-thought.html 说到 super, 大家可能觉得很 ...
- fastdfs 清晰简介 有用
是什么? FastDFS是一个轻量级分布式文件系统. 能干嘛? 对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等. 在Linux上的安装连 ...
- 基于jquery的ajax方法封装
在实际的项目里,ajax的应用频率很高,所以尽管jquery或者其他的一些类似的js库做了非常不错的封装,仍然有进一步封装简化的空间和必要 举一个例子,很久很久以前,我的ajax是这么写的: $.aj ...
- pcl point merge
http://pointclouds.org/documentation/tutorials/pairwise_incremental_registration.php#pairwise-increm ...
- 开源项目spring-shiro-training思维导图
写在前面 终于完成了一个开源项目的思维导图解读.选spring-shiro-training这个项目解读是因为它开源,然后涉及到了很多我们常用的技术,如缓存,权限,任务调度,ssm框架,Druid监控 ...
- es学习-索引配置
1.创建一个新的索引并且添加一个配置 2.更新索引配置:(更新分词器为例子) 更新分词器前,一定要关闭索引,然后更新,最后再次开启索引 url:PUT http://127.0.0.1:9200/su ...
- Demo—cookie电商购物车
说明:cookie的操作须有域名,简单点说就是需要用发布的方式去访问,查看cookie信息请用开发者模式进入application栏 1.页面布局(结构)(根目录) 商品列表 <!doctype ...
- C# 生成dll文件 并导入使用
首先 在unity创建一个脚本 并编写内容,其中需要调用的方法.变量要公有化(也可以直接新建cs文件用编译器打开编译,但要先导入UnityEngine.dll). 然后,复制脚本关闭unity,在外界 ...
- Ubuntu下安装配置java及环境变量
这里的办法不是在线安装,因为需要更新源(你懂的,费时费事~),so这里介绍在Ubuntu上手动下载安装配置Java环境变量 *系统:Ubuntu 16.4 1.下载jdk,直接用系统的Firefox浏 ...
- 多线程的那点儿事(之windows锁)
在windows系统中,系统本身为我们提供了很多锁.通过这些锁的使用,一方面可以加强我们对锁的认识,另外一方面可以提高代码的性能和健壮性.常用的锁以下四种:临界区,互斥量,信号量,event. (1) ...