Python实现8中常用排序算法
L = [2,6,4,7,9,1,3,5,8] # 1.插入排序
def insert_sort(List):
n = len(List)
for i in range(1,n): # 得到索引
j = i-1 # 获取当前元素之前的索引
temp = List[i]
while j >= 0: # 当索引大于等于时开始循环
if temp < List[j]: # 当List[i]元素小于之前的元素
List[j+1] = List[j] # 交换两个元素的位置
List[j] = temp
j -= 1 # 继续比较交换后的list[i]和再前一个元素的大小,继续循环
return List print(insert_sort(L)) #2.冒泡排序
def bubble_sort(List):
n = len(List)
for i in range(n):
for j in range(i+1, n):
if List[i] > List[j]:
List[j], List[i] = List[i], List[j]
return List print(bubble_sort(L)) # 3.快速排序
def quick_sort(List,low,high):
i=low
j=high
if i >= j:
return List
key=List[i]
while i < j:
# 当高位游标大于基准值时, 高位游标向左移动
while i < j and List[j]>=key:
j = j - 1
List[i]=List[j]
# 当低位游标指向的值,小于基准值时, 低位游标向右移动
while i < j and List[i]<=key:
i = i + 1
List[j]=List[i]
List[i]=key
quick_sort(List,low,i-1) # 对基准值左边的未排序队列排序
quick_sort(List,j+1,high)# 对基准值右边的未排序队列排序
return List print(quick_sort(L, 0, len(L)-1)) #4.选择排序
def select_sort(List):
length = len(List)
for i in range(length): # 得出全部的索引
min_index=i # 假设最小的索引
for j in range(i,length): # 获取i之后的索引
if List[j]<List[min_index]:# 比较i 之后的元素与最小元素的大小
min_index=j # 如果小于最小元素,那么久交换索引
List[i],List[min_index]=List[min_index],List[i] # 交换最小的索引指向的值
return List print(select_sort(L)) #5.归并排序
def merge_sort(list):
if len(list)<=1:
return list
# 根据长度确定中间位置
mid = int(len(list)/2)
left=merge_sort(list[:mid])
right=merge_sort(list[mid:])
return merge(left,right) def merge(list1,list2):
list=[]
i,j=0,0
while i<len(list1) and j<len(list2):
if list1[i]<list2[j]:
list.append(list1[i])
i=i+1
elif list1[i]>=list2[j]:
list.append(list2[j])
j=j+1
list.extend(list1[i:])
list.extend(list2[j:])
return list print(merge_sort(L)) #6.希尔排序
def shell_sort(List):
step = int(len(List)/2)
while step > 0:
for i in range(step, int(len(List))):
while i >= step and List[i-step] > List[i]:
List[i], List[i-step] = List[i-step], List[i]
i -= step
step = int(step/2)
return List print(shell_sort(L)) # 7.堆排序
def adjust_heap(List, i, size):
lchild = 2 * i + 1
rchild = 2 * i + 2
m = i
if i < int(size/2) and List[lchild] > List[m]:
m = lchild
if rchild < size and List[rchild] > List[m]:
m = rchild
if m != i:
List[m], List[i] = List[i], List[m]
adjust_heap(List, m, size) def build_heap(List, size):
for i in range(0, int(size/2))[::-1]:
adjust_heap(List, i, size) def heap_sort(List):
size = len(List)
build_heap(List, size)
for i in range(0, size)[::-1]:
List[0], List[i] = List[i], List[0]
adjust_heap(List, 0, i)
return List print(heap_sort(L)) # 8.基数排序
import math
def radix_sort(List, radix=10):
n = int(math.ceil(math.log(max(List), radix)))
bucket = [[] for i in range(radix)]
for i in range(1, n + 1):
for j in List:
bucket[int(j/(radix**(i-1))) % (radix**i)].append(j)
del List[:]
for x in bucket:
List += x
del x[:]
return List print(radix_sort(L))
参考: https://www.cnblogs.com/wangbin2188/p/6520560.html
以上运行环境为: python3.7.0 win10
Python实现8中常用排序算法的更多相关文章
- 面试中常用排序算法实现(Java)
当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...
- 面试中常用排序算法的python实现和性能分析
这篇是关于排序的,把常见的排序算法和面试中经常提到的一些问题整理了一下.这里面大概有3个需要提到的问题: 虽然专业是数学,但是自己还是比较讨厌繁琐的公式,所以基本上文章所有的逻辑,我都尽可能的用大白话 ...
- 排序算法——(2)Python实现十大常用排序算法
上期为大家讲解了排序算法常见的几个概念: 相关性:排序时是否需要比较元素 稳定性:相同元素排序后是否可能打乱 时间空间复杂度:随着元素增加时间和空间随之变化的函数 如果有遗忘的同学可以看排序算法——( ...
- 常用排序算法的python实现和性能分析
常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...
- Python实现常用排序算法
Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- 转载部长一篇大作:常用排序算法之JavaScript实现
转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
随机推荐
- Chromium网页Graphics Layer Tree创建过程分析
在前面一文中.我们分析了网页Render Layer Tree的创建过程.在创建Render Layer的同一时候,WebKit还会为其创建Graphics Layer.这些Graphics Laye ...
- Anaconda/kickstart
http://fedoraproject.org/wiki/Anaconda/Kickstart/zh-cn
- PCB SLOT槽孔数量计算方法,同CAM350孔数一致 实现方法
最近有好几个写脚本的朋友问我,SLOT槽孔孔的如何计算的,要求孔数与CAM350孔数保持一致. 前几年通过在CAM350里面不断测试,结果是:CAM 350中SLOT槽孔,孔与孔之间最高位,凸位高度值 ...
- jquery的ajax同步异步执行
大家先看一段简单的jquery ajax 返回值的js 代码 function getReturnAjax{ $.ajax({ type:"POST", http:/ ...
- unity3D 使用欧拉角控制视野注意点
变量声明: public PlayerInput p; //表示控制代码用来获得用户是否按下 public float rotateSpeed = 50f; //旋转速度 private GameOb ...
- java.util.Date
package com.etc.usual; import java.util.Calendar; import java.util.Date; /** * * @author Administrat ...
- Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) C. Destroying Array -- 逆向思维
原题中需要求解的是按照它给定的操作次序,即每次删掉一个数字求删掉后每个区间段的和的最大值是多少. 正面求解需要维护新形成的区间段,以及每段和,需要一些数据结构比如 map 和 set. map< ...
- 数据库操作通用函数,增强可重复利用性能C#,asp.net.sql2005
using System;using System.Data;using System.Data.SqlClient; namespace com.hua..li{ /// <summary&g ...
- 第二章 API的理解和使用
2.1.1全局命令 Key * 查看所有键,(慎用,会把所有键都遍历一次并列出) Dbsize 查看键总数,不会遍历所有键,只是从内置函数中读取一个数 Exists [key] 检查键是否存在 Del ...
- 魅族和三星Galaxy 5.0webView 问题Android Crash Report - Native crash at /system/lib/libc.so caused by webvi
解决办法是当前activity 销毁的时候 webView.destroy(); hine: ConnectedState (when=-2ms what= arg1=!CMD_RSSI_POLL : ...