python实现十大核心算法(桶排没实例)
# 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实现十大核心算法(桶排没实例)的更多相关文章
- 一篇夯实一个知识点系列--python实现十大排序算法
写在前面 排序是查找是算法中最重要的两个概念,我们大多数情况下都在进行查找和排序.科学家们穷尽努力,想使得排序和查找能够更加快速.本篇文章用Python实现十大排序算法. 干货儿 排序算法从不同维度可 ...
- 使用 js 实现十大排序算法: 桶排序
使用 js 实现十大排序算法: 桶排序 桶排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- Python实现十大经典排序算法(史上最简单)。
十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...
- Python实现十大经典排序算法(史上最简单)
十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...
- python实现十大经典排序算法
Python实现十大经典排序算法 代码最后面会给出完整版,或者可以从我的Githubfork,想看动图的同学可以去这里看看: 小结: 运行方式,将最后面的代码copy出去,直接python sort. ...
- 排序算法——(2)Python实现十大常用排序算法
上期为大家讲解了排序算法常见的几个概念: 相关性:排序时是否需要比较元素 稳定性:相同元素排序后是否可能打乱 时间空间复杂度:随着元素增加时间和空间随之变化的函数 如果有遗忘的同学可以看排序算法——( ...
- JS的十大经典算法排序
引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript ...
- 十大排序算法JavaScript实现总结
花费了几周的时间断断续续的练习和模仿与使用JavaScript代码实现了十大排序算法. 里面有每种算法的动图和静态图片演示,看到图片可以自己先按照图片的思路实现一下. github中正文链接,点击查看 ...
- 十大排序算法总结(Python3实现)
十大排序算法总结(Python3实现) 本文链接:https://blog.csdn.net/aiya_aiya_/article/details/79846380 目录 一.概述 二.算法简介及代码 ...
随机推荐
- python经典面试算法题1.1:如何实现链表的逆序
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.1 如何实现链表的逆序 [腾讯笔试题] 难度系数:⭐⭐⭐ ...
- Abp vNext 自定义 Ef Core 仓储引发异常
问题 在使用自定义 Ef Core 仓储和 ABP vNext 注入的默认仓储时,通过两个 Repository 进行 Join 操作,提示 Cannot use multiple DbContext ...
- JavaScript文档对象模型(DOM)——DOM核心操作
文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标记语言(HTML或XML)的标准编程接口. W3C已经定义了一系列DOM接口,通过这些DOM接口可 ...
- vue踩坑 导出new Vue.Store首字母要大写
控制台报错 : Uncaught TypeError: vuex__WEBPACK_IMPORTED_MODULE_6__.default.store is not a constructor 根据 ...
- 在控制器中如何对frxml的控件初始化
如果在控制器中实现Initializable这个接口,并重iInitializable这个方法 对于一个fxml文件来说它首先执行控制器的构造函数,这个时候它是无法对@FXML修饰的方法进行访问的,然 ...
- 手把手教你实现热更新功能,带你了解 Arthas 热更新背后的原理
文章来源:https://studyidea.cn/java-hotswap 一.前言 一天下午正在摸鱼的时候,测试小姐姐走了过来求助,说是需要改动测试环境 mock 应用.但是这个应用一时半会又找不 ...
- 【Linux】Debian 下安装 Apache,MySQL,PHP
首先,对你的源进行更新: $ sudo apt-get update 第一步--安装 Apache Apache 是一个开源软件,它目前运行在全球超过 50% 的服务器上,是 LAMP(Linux,A ...
- Jmeter使用代理录制web
Jmeter有录制功能,录制HTTPs需要增加一个证书配置,录制步骤如下: 1.打开jmeter,添加线程组.线程组右键,逻辑控制器>录制控制器 工作台 右键 非测试元件 >HTTP代理服 ...
- Cognitive Graph for Multi-Hop Reading Comprehension at Scale(ACL2019) 阅读笔记与源码解析
论文地址为:Cognitive Graph for Multi-Hop Reading Comprehension at Scale github地址:CogQA 背景 假设你手边有一个维基百科的搜索 ...
- Activity生命周期理解
在Android应用程序运行时,Activity的活动状态由Android以Activity栈的形式管理,当前活动的Activity位于栈顶.随着应用程序之间的切换.关闭等,每个Activity都有可 ...