基于python的七种经典排序算法教程.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于python的七种经典排序算法教程

 HYPERLINK /feixuelove1009/p/6143539.html 基于python的七种经典排序算法 一、排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定的。 内排序和外排序 内排序:排序过程中,待排序的所有记录全部放在内存中 外排序:排序过程中,使用到了外部存储。 通常讨论的都是内排序。 影响内排序算法性能的三个因素: 时间复杂度:即时间性能,高效率的排序算法应该是具有尽可能少的关键字比较次数和记录的移动次数 空间复杂度:主要是执行算法所需要的辅助空间,越少越好。 算法复杂性。主要是指代码的复杂性。 根据排序过程中借助的主要操作,可把内排序分为: 插入排序 交换排序 选择排序 归并排序 按照算法复杂度可分为两类: 简单算法:包括冒泡排序、简单选择排序和直接插入排序 改进算法:包括希尔排序、堆排序、归并排序和快速排序 以下的七种排序算法只是所有排序算法中最经典的几种,不代表全部。 二、 冒泡排序 冒泡排序(Bubble sort):时间复杂度O(n^2) 交换排序的一种。其核心思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序记录为止。 其实现细节可以不同,比如下面3种: 最简单排序实现:bubble_sort_simple 冒泡排序:bubble_sort 改进的冒泡排序:bubble_sort_advance #!/usr/bin/env python# -*- coding:utf-8 -*-# Author: Liu Jiang# Python 3.5# 冒泡排序算法 class SQList: def __init__(self, lis=None): self.r = lis def swap(self, i, j): 定义一个交换元素的方法,方便后面调用。 temp = self.r[i] self.r[i] = self.r[j] self.r[j] = temp def bubble_sort_simple(self): 最简单的交换排序,时间复杂度O(n^2) lis = self.r length = len(self.r) for i in range(length): for j in range(i+1, length): if lis[i] lis[j]: self.swap(i, j) def bubble_sort(self): 冒泡排序,时间复杂度O(n^2) lis = self.r length = len(self.r) for i in range(length): j = length-2 while j = i: if lis[j] lis[j+1]: self.swap(j, j+1) j -= 1 def bubble_sort_advance(self): 冒泡排序改进算法,时间复杂度O(n^2) 设置flag,当一轮比较中未发生交换动作,则说明后面的元素其实已经有序排列了。 对于比较规整的元素集合,可提高一定的排序效率。 lis = self.r length = len(self.r) flag = True i = 0 while i length and flag: flag = False j = length - 2 while j = i: if lis[j] lis[j + 1]: self.swap(j, j + 1)

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档