首页 > 编程知识 正文

python写算法之快速排序(python排序算法详解)

时间:2023-12-20 16:55:07 阅读:318544 作者:NNRV

本文目录一览:

python怎么快速排序与查找

算法体现的是一个思想,就像这里体现的是一个"分而治之"的思想,只要思想不山寨,一些小细节其实不要太在意。学算法嘛,就学个处理问题的思想。不过真正的快排算法不是这样的,真正最优的快排要求随机选择主元加原址排序。我这里两样都没做到。但是我还是认为他是个快排算法,因为他的思想就是快排的思想。

很多时候研究算法去争论代码量的多少真的没有这个必要。

python 算法种类

1. 选择排序算法:选择排序是一种简单直观的排序算法。原理:首先在未排序序列中找到最小或最大元素,存放到排序序列的起始位置;然后,再从剩余未排序元素中继续寻找最大最小元素,然后放到已排序序列的后面,以此类推直到所有元素均排序完毕。

2. 快速排序算法:快速排序的运行速度快于选择排序。原理:设要排序的数组为N,首先任意选取一个数据作为关键数据,然后将所有比它小的数放到它前面,所有比它大的数都放到它后面,这个过程称之为快速排序。

3. 二分查找算法:二分查找的输入是一个有序的列表,如果要查找的元素包含在一个有序列表中,二分查找可以返回其位置。

4. 广度优先搜索算法:属于一种图算法,图由节点和边组成。一个节点可以与多个节点连接,这些节点称为邻居。它可以解决两类问题:第一类是从节点A出发,在没有前往节点B的路径;第二类问题是从节点A出发,前往B节点的哪条路径最短。使用广度优先搜索算法的前提是图的边没有权值,即该算法只用于非加权图中,如果图的边有权值的话就应该使用狄克斯特拉算法来查找最短路径。

5. 贪婪算法:又叫做贪心算法,对于没有快速算法的问题,就只能选择近似算法,贪婪算法寻找局部最优解,并企图以这种方式获得全局最优解,它易于实现、运行速度快,是一种不错的近似算法。

求python中,自定义的复杂数据结构,快速排序的方法

应该是你sorted的使用方式不对吧,它可以对name.key这样的形式进行排序的。

class m:

    def __init__(self,name,id):

        self.name=name

        self.id=id

    @property

    def key(self):

        return self.name

    def len(self):

        return len(self.name)

    def __str__(self):

        return '{{'name':'{0}','id':{1}}}' 

               .format(self.name,self.id) 

    __repr__ = __str__

s = [m('zzzz',1),m('aaa',4)]

l = [('source', s),

     ]

# 直接属性排序

l.append(('by name', sorted(s, key=lambda x: x.name)))

l.append(('by id', sorted(s, key=lambda x: x.id)))

# 属性函数排序

l.append(('by key', sorted(s, key=lambda x: x.key)))

# 函数排序

l.append(('by len()', sorted(s, key=lambda x: x.len())))

for e in l:

    print(e[0])

    print(e[1])

这是输出的结果:

source

[{'name':'zzzz','id':1}, {'name':'aaa','id':4}]

by name

[{'name':'aaa','id':4}, {'name':'zzzz','id':1}]

by id

[{'name':'zzzz','id':1}, {'name':'aaa','id':4}]

by key

[{'name':'aaa','id':4}, {'name':'zzzz','id':1}]

by len()

[{'name':'aaa','id':4}, {'name':'zzzz','id':1}]

上述四种用法都是没问题的,至于name[key]的形式同样是OK的。

sorted的参数key,它是一个函数,简单的话可以直接用lambda,复杂点的可以定义成有一个参数的函数,比如:

def sorted_other(item):

    if hasattr(item, 'name'):

        return item.name

    else:

        return None

l.append(('by other func', sorted(s, key=sorted_other)))

几种排序算法分析及python实现

排序算法针对不同情况有所不同,不能一概而论。

计算机课程的数据结构有几个章节在讨论排序,这里不能尽述,大致来说快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。

直接百度“排序”,查看百度百科里的解释,里面有常用算法和例子代码,可以研究一下。

python中如何按不同单位的质量排序

1.冒泡排序,相邻位置比较大小,将比较大的(或小的)交换位置;

2.选择排序,遍历选择一个最小的数与当前循环的第一个数交换;

3.快速排序:将子段的第一个元素做为中值,先从右向左遍历,如过比中值大high-1,如果比中值小,将这个值放到low那里。

python算法有哪些

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

一个算法应该具有以下七个重要的特征:

①有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止;

②确切性(Definiteness):算法的每一步骤必须有确切的定义;

③输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输     入是指算法本身定出了初始条件;

④输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没       有输出的算法是毫无意义的;

⑤可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行       的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);

⑥高效性(High efficiency):执行速度快,占用资源少;

⑦健壮性(Robustness):对数据响应正确。

相关推荐:《Python基础教程》

五种常见的Python算法:

1、选择排序

2、快速排序

3、二分查找

4、广度优先搜索

5、贪婪算法

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。