# author:sevenduke
# 2019-06-11
# 一、交换排序
# 排序算法的温故:冒泡排序 def dubblesort(arr):
for i in range(0, len(arr)-1):
for j in range(0, len(arr) - 1 - i):
if arr[j] > arr[j+1]:
#Python的变量并不直接存储值,而只是引用一个内存地址,交换变量时,只是交换了引用的地址。
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
if __name__ == "__main__":
list = [1,5,3,45,2,34,46,100]
print("List source is:", list)
result = dubblesort(list)
print("List source is:", result)
# author:sevenduke
# 2019-06-11
# 一、交换排序
# 排序算法的温故:快速排序 def quickSort(arr, left = None, right = None):
left = 0 if not isinstance(left, (int, float)) else left
right = len(arr) - 1 if not isinstance(right, (int, float)) else right
# 可以 <= 不会错,但是程序多执行了许多次没必要的操作
if left < right:
partitionInex = parttion(arr,left,right)
quickSort(arr, left,partitionInex-1)
quickSort(arr, partitionInex+1, right)
return arr def parttion(arr, left, right):
pivot = left
position = left + 1
index = position
while index <= right:
if arr[index] < arr[pivot]:
swap(arr,index,position)
position += 1
index += 1
swap(arr,pivot,position-1)
print("List source is:", arr)
return position-1 def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i] if __name__ == "__main__":
list = [2,42,53,23,34,290,2344,200,3500]
print("List source is:",list)
result = quickSort(list)
print("List source is:", result)
# author:sevenduke
# 2019-06-11
# 二、选择类排序
# 排序算法的温故:选择排序 def selectSort(arr):
for i in range(len(arr)-2):
minIndex = i
for j in range(i+1,len(arr)):
if arr[minIndex] > arr[j]:
minIndex = j
if i != minIndex:
swap(arr, i, minIndex)
return arr def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i] if __name__ == "__main__":
list = [2, 42, 53, 23, 34, 290, 2344, 200, 3500]
print("List source is:", list)
result = selectSort(list)
print("List source is:", result)
import math
# author:sevenduke
# 2019-06-11
# 二、选择类排序
# 排序算法的温故:堆排序
# 堆排序分为以下两种:
#1、大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;
#2、小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列; def bulitMaxHeap(arr):
for i in range(math.floor(len(arr)/2),-1,-1):
heapify(arr,i) def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i] def heapify(arr, i):
left = i*2+1
right = i*2+2
position = i
if left < arrlen and arr[left] > arr[position]:
position = left
if right < arrlen and arr[right] > arr[position]:
position = right
if position != i:
swap(arr,i,position)
heapify(arr,position) def heapSort(arr):
global arrlen
arrlen = len(arr)
# 从大到小排序
bulitMaxHeap(arr)
# 变化为从小到大排序
for i in range(len(arr)-1,-1,-1):
swap(arr,0,i)
# 将当前可取的最大值拿到末尾
arrlen -= 1
heapify(arr,0)
return arr if __name__ == '__main__':
list = [1, 5, 8, 123, 22, 54, 7, 99, 300, 222]
print("List source is:", list)
result = heapSort(list)
print("List sort is:", result)
# author:sevenduke
# 2019-06-11
# 三、插入类排序
# 排序算法的温故:插入排序 def insertSort(arr):
for i in range(len(arr)):
index = i
for j in range(i,len(arr)):
if arr[index] > arr[j]:
index = j
if(index != i):
swap(arr, i, index)
return arr def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i] if __name__ == "__main__":
list = [2, 42, 53, 23, 34, 290, 2344, 200, 3500]
print("List source is:", list)
result = insertSort(list)
print("List source is:", result)
import math
# author:sevenduke
# 2019-06-11
# 三、插入类排序
# 排序算法的温故:希尔排序 def shellSort(arr):
incretment = 1
while(incretment < len(arr)/3):
incretment = incretment * 3 + 1
while incretment > 0:
for i in range(incretment, len(arr)):
temp = arr[i]
j = i - incretment
while j >= 0 and arr[j] > temp:
arr[j+incretment] = arr[j]
j -= incretment
arr[j+incretment] = temp
#incretment = int((incretment-1)/3)
incretment = math.floor(incretment/3)
return arr if __name__ == "__main__":
list = [2, 42, 53, 23, 34, 290, 2344, 200, 3500]
print("List source is:", list)
result = shellSort(list)
print("List source is:", result)
import math
# author:sevenduke
# 2019-06-11
# 四、归并类排序
# 排序算法的温故:归并排序 def mergeSort(arr):
import math
if len(arr) < 2:
return arr
midIndex = math.floor(len(arr)/2)
left, right = arr[0:midIndex], arr[midIndex:]
return merge(mergeSort(left),mergeSort(right))
def merge(left, right):
result = []
while left and right:
if left[0] < right[0]:
result.append(left.pop(0))
else:
result.append(right.pop(0))
while left:
result.append(left.pop(0))
while right:
result.append(right.pop(0))
return result
if __name__ == "__main__":
list = [34,24,53,2,43,54,657,3435,2423,231]
print("List source is:", list)
result = mergeSort(list)
print("List source is:", result)
import math
# author:sevenduke
# 2019-06-11
# 五、分布类类排序
# 排序算法的温故:计数排序
# 局限性:适用于有固定范围的排序
# 桶排序和计数排序本质一致,这里就不做介绍了 def countingSort(arr):
arrlen = max(arr)+1
result = [0]*arrlen
sortIndex = 0
# 将arr中的数据填入到result数组中
for i in range(len(arr)):
if not result[arr[i]]:
result[arr[i]] = 0
result[arr[i]] += 1 # 将result数组中的数据写入到arr中
for i in range(len(result)):
while result[i] > 0:
arr[sortIndex] = i
sortIndex += 1
result[i] -= 1
return arr if __name__ == "__main__":
list = [2,42,5234,24,243,236,76,767,565,45]
print("List source is:", list)
result = countingSort(list)
print("List source is:", result)
import math
# author:sevenduke
# 2019-06-11
# 五、分布类类排序
# 排序算法的温故:基数排序
# 局限性:适用于整数排序(推广到特定的浮点数,和字符串,以及日期) def redixSort(arr):
# 找到arr中的最大的位数
maxNumber = max(arr)
mN_len = len(str(maxNumber))
index = 0
while index < mN_len:
# 初始化二维数组
bucket_list = [[] for i in range(10)]
for elem in arr:
bucket_list[int(elem / (10**index) % 10)].append(elem)
arr.clear()
for elem in bucket_list:
for num in elem:
arr.append(num)
index += 1
return arr if __name__ == "__main__":
list = [2, 42, 53, 23, 34, 290, 2344, 200, 3500]
print("List source is:", list)
result = redixSort(list)
print("List source is:", result)

注:2019年6月份的计划是打算一边学习pyhton核心编程这本书,然后用python将以部分算法实现下,回顾下之前学过的内容。之前都在走项目这条路,但是过程中发现自己的写代码的思维跟不上大脑运作的思维,就是最近代码写得太少了。所以打算最近一段时间增强下自己的代码实现能力。这段时间的学习发现编程能力遇到了瓶颈,过分的依赖于别人写好的模板,然后拿去套用,没有掌握核心内容。鉴于应该是自己太想向着实践发展,忽视了自身思维的提升导致的。要开是刷leetcode了,争取每周刷20道题吧,加油!路小刀!

python实现十大核心算法(桶排没实例)的更多相关文章

  1. 一篇夯实一个知识点系列--python实现十大排序算法

    写在前面 排序是查找是算法中最重要的两个概念,我们大多数情况下都在进行查找和排序.科学家们穷尽努力,想使得排序和查找能够更加快速.本篇文章用Python实现十大排序算法. 干货儿 排序算法从不同维度可 ...

  2. 使用 js 实现十大排序算法: 桶排序

    使用 js 实现十大排序算法: 桶排序 桶排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  3. Python实现十大经典排序算法(史上最简单)。

    十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...

  4. Python实现十大经典排序算法(史上最简单)

    十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...

  5. python实现十大经典排序算法

    Python实现十大经典排序算法 代码最后面会给出完整版,或者可以从我的Githubfork,想看动图的同学可以去这里看看: 小结: 运行方式,将最后面的代码copy出去,直接python sort. ...

  6. 排序算法——(2)Python实现十大常用排序算法

    上期为大家讲解了排序算法常见的几个概念: 相关性:排序时是否需要比较元素 稳定性:相同元素排序后是否可能打乱 时间空间复杂度:随着元素增加时间和空间随之变化的函数 如果有遗忘的同学可以看排序算法——( ...

  7. JS的十大经典算法排序

    引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript ...

  8. 十大排序算法JavaScript实现总结

    花费了几周的时间断断续续的练习和模仿与使用JavaScript代码实现了十大排序算法. 里面有每种算法的动图和静态图片演示,看到图片可以自己先按照图片的思路实现一下. github中正文链接,点击查看 ...

  9. 十大排序算法总结(Python3实现)

    十大排序算法总结(Python3实现) 本文链接:https://blog.csdn.net/aiya_aiya_/article/details/79846380 目录 一.概述 二.算法简介及代码 ...

随机推荐

  1. python中实例方法,类方法,静态方法简单理解

    按照字面名称来理解的话: 实例方法就是实例化对象的方法,绑定在实例对象上 类方法就是类自己的方法,不需要实例化对象,类自己就是对象,直接绑定在类上 静态方法就是普通的函数,函数作为对象,不过是封装在类 ...

  2. 护网杯web

    首先进入网页后,观察到有sign up 点击sign up 进行注册 再点击sign in 进行登录 进入一个买辣条的界面,可以知道,5元可以买一包大辣条,多包大辣条可以换一包辣条之王,多包辣条之王可 ...

  3. c/c++求最大公约数和最小公倍数

    最大公约数GCD(Greatest Common Divisor) 最常见的求两个数的最大公约数的算法是辗转相除法,也叫欧几里得算法 该算法的c++语言实现如下: #include<iostre ...

  4. 给大家整理了几个开源免费的 Spring Boot + Vue 学习资料

    最近抽空在整理前面的文章案例啥的,顺便把手上的几个 Spring Boot + Vue 的学习资料推荐给各位小伙伴.这些案例有知识点的讲解,也有项目实战,正在做这一块的小伙伴们可以收藏下. 案例学习 ...

  5. java 中的 shuffle()用于打乱list中的元素

    题目描述: 数组里面有{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},请随机打乱顺序生成新的数组: import java.util.ArrayList; import java.ut ...

  6. 分析facebook的AsyncDisplayKit框架中的Transaction的工作原理

    在AsyncDisplayKit框架中有一个_ASAsyncTransaction模块,用于AsyncDiplayNode的异步事务,使用了dispatch_group实现. 主要目的是将operat ...

  7. I/O多路复用模型

    背景 在文章<unix网络编程>(12)五种I/O模型中提到了五种I/O模型,其中前四种:阻塞模型.非阻塞模型.信号驱动模型.I/O复用模型都是同步模型:还有一种是异步模型. 想写一个系列 ...

  8. 页面加载和图片加载loading

    准备放假了!也是闲着了 ,就来整理之前学到或用到的一下知识点和使用内容,这次记录的是关于加载的友好性loading!!!这里记录一下两种加载方法 1.页面加载的方法,它需要用到js里面两个方法 doc ...

  9. Nginx 代理本地文件夹(Windows环境)

    安装环境: win10 nginx-1.17.2 步骤: 一.打开nginx.conf 路径:\nginx-1.17.2\conf\nginx.conf 二.编辑 配置跨域以及代理文件夹路径 三.启动 ...

  10. dom4j的测试例子和源码详解(重点对比和DOM、SAX的区别)

    目录 简介 DOM.SAX.JAXP和DOM4J xerces解释器 SAX DOM JAXP DOM解析器 获取SAX解析器 DOM4j 项目环境 工程环境 创建项目 引入依赖 使用例子--生成xm ...