python常用排序算法的实现代码
作者:Mars.wang 发布时间:2022-08-21 08:50:00
标签:python,排序,算法,实现
这篇文章主要介绍了python常用排序算法的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
排序是计算机语言需要实现的基本算法之一,有序的数据结构会带来效率上的极大提升。
1.插入排序
插入排序默认当前 * 入的序列是有序的,新元素插入到应该插入的位置,使得新序列仍然有序。
def insertion_sort(old_list):
n=len(old_list)
k=0
for i in range(1,n):
temp=old_list[i]
j=i
while j>0 and temp<old_list[j-1]:
old_list[j]=old_list[j-1]
j=j-1
old_list[j]=temp
return old_list
2.冒泡排序
冒泡排序的原理是对序列进行遍历,遍历过程中如果发现相邻两个元素,左边的元素大于右边,则进行交换,一次遍历之后最大的元素被移动到对尾,然后进行第二次遍历,直到队列有序。
def bubble_sort(old_list):
n=len(old_list)
for i in range(n-1):
for j in range(n-1-i):
if old_list[j]>old_list[j+1]:
old_list[j],old_list[j+1]=old_list[j+1],old_list[j]
return old_list
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
4.选择排序
选择排序的原理是是先找到起始数组中最小的元素,将它交换到i=0;然后寻找剩下元素中最小的元素,将它交换到i=1的位置…… 直到找到第二大的元素,将它交换到n-2的位置。这时,整个数组的排序完成。
def select_sort(list):
length=len(list)
for i in range(length):
min_index=i
for j in range(i,length):
if list[j]<list[min_index]:
min_index=j
list[i],list[min_index]=list[min_index],list[i]
return list
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
6.希尔排序
def shell_sort(nums):
step = len(nums)/2
while step > 0:
for i in range(step, len(nums)):
while i >= step and nums[i-step] > nums[i]:
nums[i], nums[i-step] = nums[i-step], nums[i]
i -= step
step = step/2
return nums
来源:https://www.cnblogs.com/wangbin2188/p/6520560.html


猜你喜欢
- 解决方法一: mysql安装时候的编码, 看下my.ini,有无 [mysql] default-character-set=utf8 [c
- difflib模块提供的类和方法用来进行序列的差异化比较,它能够比对文件并生成差异结果文本或者html格式的差异化比较页面,如果需要比较目录
- 一、控制用户存取 1、创建修改用户Creating Users Create/alter user new_user identified
- 目录一、MySQL的join buffer二、join buffer cache存储空间的分配三、普通的多表查询实现四、join buffe
- python读文件操作1. read三种不同的方式f = open('hello.txt') #'hello.txt
- 需求背景一个统计接口,前端需要返回两个数组,一个是0-23的小时计数,一个是各小时对应的统计数。思路 直接使用group by查询要统计的表
- python具体强大的库文件,很多功能都有相应的库文件,所以很有必要进行学习一下,其中有一个ftp相应的库文件ftplib,我们只需要其中的
- 目录前言typeof是否能正确判断类型?instanceof是否能正确判断类型?Object.prototype.toString.call
- 有些时候,我们需要将某些程序放到子进程中去运行,以达到整合系统的目的。在Python中,一个非常好的选择就是使用subprocess模块,本
- 本文通过一个csv实例文件来展示如何删除Pandas.DataFrame的行和列数据文件名为:example.csv内容为:datespri
- 基于OpenCV实现拼图版小游戏,供大家参考,具体内容如下效果展示实现思路1.对图像进行分割,分割成m*n个子图2.打乱子图的顺序3.将子图
- 本文实例讲述了Python实现的简单hangman游戏。分享给大家供大家参考。具体如下:#!/usr/bin/env pythonimpor
- 每个进行过较大型的ASP-Web应用程序设计的开发人员大概都有如下的经历:ASP代码与页面HTML混淆难分,业务逻辑与显示方式绞合,使得代码
- 作为一个mod_python模块的替代,你可以考虑使用mod_wsgi模块,此模块开发的时间比mod_python的开发时间离现在更近一些,
- 1 Support Vector Machines1.1 Example Dataset 1%matplotlib inlineimport
- 一、无镜像安装 pip install 库名打开命令提示符【win + r】,输入cmd,在命令提示窗口输入pip install 库名,
- 上次在blueidea上看到一个元素圆角的实现方法,但是那个太复杂了。于是就自己写了一个函数,可以将元素自动圆角,如div层,表格等。共有四
- <script language="javascript"> function window.onload(
- 功能:间隔5毫秒,快速点击屏幕某区域,循环45000000次from ctypes import *import timetime.slee
- 一、性能度量性能度量目的是对学习期的泛华能力进行评估,性能度量反映了任务需求,在对比不同算法的泛华能力时,使用不同的性能度量往往会导致不同的