# 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. AI的真实感

    目录 1.让AI"不完美"--估算和假设 2 AI感知 全能感知 特定感觉无知 3 AI的个性 4 AI的预判 5 AI的智能等级 ​ AI的真实感一直是游戏AI程序员追求的目标, ...

  2. PHP程序员-常用工具

    三连问 经常有社区的同学问: “我的PHP程序有没有阻塞,我的PHP程序有没有开启协程(对自己写好的代码表示不自信),我的PHP程序有没有问题”.然后贴出了自己的程序,然后进入了愉快的灌水环节,随着时 ...

  3. Anaconda 笔记

    Anaconda笔记 conda 功能 管理版本的切换 安装其他的包 conda 创建python27环境 conda create --name python27 python=2.7 conda ...

  4. 领扣(LeetCode)合并两个有序数组 个人题解

    给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. ...

  5. MySQL数据库的主从同步

    什么要进行数据库的主从同步? 防止单点故障造成的数据丢失 主从复制的原理 MySQL从数据库开启I/O线程,向主服务器发送请求数据同步(获取二进制日志) MySQL数据库开启I/O线程回应从数据库 从 ...

  6. vue项目引入自定义.css的样式文件

    ES6的引入方式: .vue文件中 css文件引入 <template></template> <style scoped> @import "../as ...

  7. PHP中的服务容器与依赖注入的思想

    依赖注入 当A类需要依赖于B类,也就是说需要在A类中实例化B类的对象来使用时候,如果B类中的功能发生改变,也会导致A类中使用B类的地方也要跟着修改,导致A类与B类高耦合.这个时候解决方式是,A类应该去 ...

  8. 20191010-6 alpha week 1/2 Scrum立会报告+燃尽图 04

    此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/8749] 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 ...

  9. Golang 入门系列(十六)锁的使用场景主要涉及到哪些?读写锁为什么会比普通锁快

    前面已经讲过很多Golang系列知识,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html, 接下来要说的 ...

  10. day 41 css固定位置 以及小米商城项目

    .如何让一个绝对定位的盒子居中 left:%; margin-left:- 宽度的一半 .固定定位 position: fixed; ()脱标 参考点:浏览器的左上角 作用:固定导航栏 返回顶部 小广 ...