sort函数

【Python实现快排】 -- 2019-08-09 12:12:36

非 Y 不嫁゛ 提交于 2019-11-26 16:24:08
原文: http://106.13.73.98/__/117/ 挖坑法思路: 取一个元素p(第一个元素),使元素p归位; 列表被p分成两部分,左边的数一定不大于p,右边的数一定不小于p; 递归完成排序。 Python代码示例: lst = [5, 7, 4, 3, 1, 2, 9, 8] def quick_sort(d, l, r): if l < r: m = partition(d, l, r) quick_sort(d, l, m - 1) quick_sort(d, m + 1, r) def partition(d, l, r): # 挖坑法,函数执行结束后,左边的数一定不大于p,右边的数一定不小于p p = d[l] while l < r: while l < r and d[r] >= p: r -= 1 d[l] = d[r] while l < r and d[l] <= p: l += 1 d[r] = d[l] d[l] = p return l quick_sort(lst, 0, len(lst) - 1) 《算法导论》中的快速排序: class QuickSort(object): __INSTANCE = None def __new__(cls, *args, **kwargs): """单例模式""" if not cls.__INSTANCE

排序算法

徘徊边缘 提交于 2019-11-26 13:19:10
算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 算法复杂度 相关概念 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度:是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1.1 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成。 1.2 代码实现

十大经典排序算法的算法描述和代码实现

谁说胖子不能爱 提交于 2019-11-26 04:48:51
这里详细讲解了十大经典算法的分类,例如交换排序、插入排序、选择排序等比较类排序,以及计数排序、桶排序和基数排序的非比较类排序,分析了各种排序算法的复杂度和稳定性,还有JAVA代码的详细实现。对冒泡排序、插入排序、选择排序和堆排序等十种算法进行了详细的思想总结。 一、算法概述 1、算法分类 十种常见排序算法可以分为两大类: (1)比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn)因此也称为非线性时间比较类排序。 (2)非比较类排序:不通过比较元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 2、算法复杂度 3、相关概念 (1)稳定 如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 (2)不稳定 如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 (3)时间复杂度 对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 (4)空间复杂度 是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 二、排序算法的代码实现 1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成

排序学习笔记

风流意气都作罢 提交于 2019-11-25 21:49:21
文章目录 1、如何分析一个“排序算法”? 1.1 排序算法的执行效率 1.2 排序算法的内存消耗 1.3 排序算法的稳定性 2、复杂度O(n2)的排序 2.1 冒泡排序(Bubble Sort) 2.2 插入排序(Insertion Sort) 2.3 选择排序(Selection Sort) 2.4 三种排序对比图 2.5 为什么插入排序要比冒泡排序更受欢迎呢? 3、复杂度O(nlogn)的排序 3.1 归并排序 3.2 快速排序 3.3 三种比较 4、复杂度O(n)的排序 4.1 桶排序(Bucket sort) 4.2 计数排序(Counting sort) 4.3 基数排序(Radix sort) 1、如何分析一个“排序算法”? 1.1 排序算法的执行效率 最好情况、最坏情况、平均情况时间复杂度 时间复杂度的系数、常数 、低阶 比较次数和交换(或移动)次数 1.2 排序算法的内存消耗 1.3 排序算法的稳定性 ​ 如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。 2、复杂度O(n2)的排序 2.1 冒泡排序(Bubble Sort) // 冒泡排序,a 表示数组,n 表示数组大小 public void bubbleSort ( int [ ] a , int n ) { if ( n <= 1 ) return ; for ( int i

常用算法[转]

。_饼干妹妹 提交于 2019-11-25 21:05:12
十种常见排序算法js 原文链接 https://www.cnblogs.com/onepixel/p/7674659.html 十种常见排序算法c 原文链接 https://blog.csdn.net/weixin_45855916/article/details/103041660 https://blog.csdn.net/kexuanxiu1163/article/details/103051357 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度 0.3 相关概念 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素

常用算法[转]

陌路散爱 提交于 2019-11-25 19:54:04
十种常见排序算法js 原文链接 https://www.cnblogs.com/onepixel/p/7674659.html 十种常见排序算法c 原文链接 https://blog.csdn.net/weixin_45855916/article/details/103041660 https://blog.csdn.net/kexuanxiu1163/article/details/103051357 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度 0.3 相关概念 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素

常用算法[转]

本小妞迷上赌 提交于 2019-11-25 19:05:17
十种常见排序算法js 原文链接 https://www.cnblogs.com/onepixel/p/7674659.html 十种常见排序算法c 原文链接 https://blog.csdn.net/weixin_45855916/article/details/103041660 https://blog.csdn.net/kexuanxiu1163/article/details/103051357 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度 0.3 相关概念 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素