python:实现几种排序算法
冒泡排序
比较相邻两个字符,如果左边大于右边,则交换位置,遍历一遍字符后,则最大的肯定在最右边;继续循环处理剩下的字符(最右边的不用再比较了,已经最大了)
代码实现:
def BubbleSort(sourceStr):
l = list(sourceStr)
cnt = len(l)-1 while cnt >= 0:
i = 0
j = 0
while i < cnt:
j = i + 1
if l[i] > l[j]:
tmp = l[j]
l[j] = l[i]
l[i] = tmp
i+=1
cnt-=1
return ''.join(l) if __name__ == '__main__':
myStr = ''
print(' Before Sort: %s \n After Sort: %s' %(myStr,BubbleSort(myStr)) )
执行结果:
C:\Users\suneee\AppData\Local\Programs\Python\Python36\python.exe E:/wangjz/PyWorkSpace/LearnPython/test_order.py
Before Sort: 125694520
After Sort: 012245569 Process finished with exit code 0
选择排序
每次从字符串中选择最小的值,放到新的列表中,选完一个,原字符串就去掉最小的那个;直到选完,新的列表也组成了
代码实现:
def SelectSort(sourceStr):
oldList = list(sourceStr)
newList = []
maxStr = ''
while oldList!=[]:
maxStr = min(oldList)
newList.append(maxStr)
oldList.remove(maxStr)
return ''.join(newList) if __name__ == '__main__':
myStr = ''
# print(' Before Sort: %s \n After Sort: %s' %(myStr,BubbleSort(myStr)) )
print(' Before Sort: %s \n After Sort: %s' %(myStr,SelectSort(myStr)) )
执行结果:
C:\Users\suneee\AppData\Local\Programs\Python\Python36\python.exe E:/wangjz/PyWorkSpace/LearnPython/test_order.py
Before Sort: 125694520
After Sort: 012245569 Process finished with exit code 0
插入排序
选定第一个元素作为已排序的数列(假设为Arr),判断下一个元素,与Arr中元素从后往前比较,如果比某个元素大,则插入到该元素之后(Arr元素相应增加);如果比Arr中的元素都小,则插入至最开始位置(Arr元素相应增加)
代码实现:
def InserSort(sourceStr):
l = list(sourceStr)
cnt = len(l)
iCur = 1
while iCur < cnt :
i = iCur-1
while i >= 0:
iFlg = False
if l[iCur] >= l[i]:
iFlg = True
l.insert(i + 1,l[iCur])
l.pop(iCur+1)
break
i -= 1
if iFlg == False :
l.insert(0,l[iCur])
l.pop(iCur+1)
iCur += 1
return ''.join(l) if __name__ == '__main__':
myStr = ''
# print(' Before Sort: %s \n After Sort: %s' %(myStr,BubbleSort(myStr)) )
# print(' Before Sort: %s \n After Sort: %s' %(myStr,SelectSort(myStr)) )
print(' Before Sort: %s \n After Sort: %s' %(myStr,InserSort(myStr)) )
执行结果:
C:\Users\suneee\AppData\Local\Programs\Python\Python36\python.exe E:/wangjz/PyWorkSpace/LearnPython/test_order.py
Before Sort: 125694520
After Sort: 012245569 Process finished with exit code 0
快速排序
一种特殊的冒泡排序。一个数列,假如取首数字为基准值,则从最右边(下标为right)往左寻找,直至找到一个比基准值小的数,交换位置;从最左边(下标为left)+1的位置往右寻找,直至找到一个大于基准值的数,再次交换位置;循环往复,直至left等于right,则一次分区完成(基准值左边都比他小,右边都比他大)。然后进行递归,对左边和右边依次继续分区,直至分区长度为1。
代码实现:
def division(l,left,right):
while left < right:
while left < right and l[right] >= l[left]:
right -= 1
if left < right:
tmp = l[left]
l[left] = l[right]
l[right] = tmp
left += 1
while left < right and l[left] <= l[right]:
left += 1
if left < right:
tmp = l[left]
l[left] = l[right]
l[right] = tmp
right -= 1
return left def fast_sort(l,left,right):
if left < right:
pivot = division(l, left, right)
fast_sort(l,left,pivot-1)
fast_sort(l,pivot+1,right)
return l if __name__ == '__main__':
l = [71,6,0,25,2,99,-1]
print(fast_sort(l,0,l.__len__()-1))
执行结果:
E:\kusy\python\venv\Scripts\python.exe E:/kusy/python/testSort.py
[-1, 0, 2, 6, 25, 71, 99] Process finished with exit code 0
python:实现几种排序算法的更多相关文章
- 用Python实现几种排序算法
#coding=utf-8 # 1 快速排序算法 def qksort(list): if len(list)<=1: return list else: pivot = list[0] les ...
- 几种排序算法的学习,利用Python和C实现
之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...
- python 十大经典排序算法
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算法有:插入排序.希尔排序.选 ...
- Python实现的选择排序算法原理与用法实例分析
Python实现的选择排序算法原理与用法实例分析 这篇文章主要介绍了Python实现的选择排序算法,简单描述了选择排序的原理,并结合实例形式分析了Python实现与应用选择排序的具体操作技巧,需要的朋 ...
- 秒杀9种排序算法(JavaScript版)
一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...
- PHP的几种排序算法的比较
这里列出了几种PHP的排序算法的时间比较的结果,,希望对大家有所帮助 /* * php 四种排序算法的时间与内置的sort排序比较 * 3000个元素,四种算法的排序所用的时间比较 * 冒泡排序 85 ...
- 学习Java绝对要懂的,Java编程中最常用的几种排序算法!
今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来! ,群里有免费的学习视频和项目给大家练手.大神有空时也 ...
- C#常用8种排序算法实现以及原理简介
public static class SortExtention { #region 冒泡排序 /* * 已知一组无序数据a[1].a[2].--a[n],需将其按升序排列.首先比较a[1]与a[2 ...
- 排序—时间复杂度为O(n2)的三种排序算法
1 如何评价.分析一个排序算法? 很多语言.数据库都已经封装了关于排序算法的实现代码.所以我们学习排序算法目的更多的不是为了去实现这些代码,而是灵活的应用这些算法和解决更为复杂的问题,所以更重要的是学 ...
- java算法03 - 常用的8种排序算法
Java常用的八种排序算法: 插入排序 - 直接插入排序 每次将待排序的记录按照关键字的大小,插入到前面已经排好序的记录的适当位置.直到全部记录插入完成. 代码实现 /** * 直接插入排序 O(n^ ...
随机推荐
- 「GXOI / GZOI2019」宝牌一大堆 (DP)
题意 LOJ传送门 题解 可以发现「七对子」 和 「国士无双」直接暴力就行了. 唯一的就是剩下的"3*4+2". 考试的时候写了个爆搜剪枝,开了O2有50pts.写的时候发现可以D ...
- LVS+DR+apache+keepalived负载均衡
1.首先准备两台服务器.三台也可以我这里是两台 IP:192.168.52.33 IP:192.168.52.34 VIP:192.168.52.100 2.关闭防火墙 systemctl stop ...
- podium podlets 说明
podlets 提供了一个页面片段服务,podlets 包含了一些元数据信息,通过json 暴露, 主要包含以下内容 一个 http endpoint 提供主要内容 一个 http endpoint ...
- blockstack与Ethereum
https://github.com/blockstack https://bihu.com/article/1260288 blockstack是用户登录的认证中心,类似java中的OAuth2进行 ...
- 大厂HR面试必备ES6中的深入浅出面试题知识点
ESMAScript6简介,ES6是JavaScript语言的下一代标准,目的是让JavaScript语言可以写复杂的大型应用程序,成为企业级语言.那么ECMAScript和JavaScript的关系 ...
- Git 自救指南:这些坑你都跳得出吗?
阅读本文大概需要 2 分钟. 菜单栏中添加我微信,私聊[加群]拉你入微信学习交流群 Git 虽然因其分布式管理方式,不完全依赖网络,良好的分支策略,容易部署等优点,已经成为最受欢迎的源代码管理方式. ...
- Spring不能直接@autowired注入Static变量
一.业务场景 spring框架应用中有些静态方法需要依赖被容器管理的类,就像这样: @Component public class Test { @Autowired private static U ...
- RFC-6455 The WebSocket Protocol 浅读
什么是WebSokcet? WebSocket是一种协议,并且是各大主流浏览器作为客户端支持的协议.它的目标就是用来替代基于 XMLHTTPRequest和长轮询的解决方案.应用在时时弹幕,消息推送, ...
- JCR分区 | 中科院SCI期刊分区表
LetPub查询系统,非常方便,分区影响因子都可以查询,还有投稿经验可以参考. SCI全称是Science Citation Index(科学引文索引) 科睿唯安JCR分区(Journal Citat ...
- ContentProvider数据库共享之——实例讲解
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/harvic880925/article/details/44591631 前言:现在这段时间没这 ...