Python排序:基础与进阶

作者:快去debug2024.01.17 11:03浏览量:5

简介:本文将介绍Python中常见的排序算法,包括冒泡排序、选择排序、插入排序、快速排序等。我们将深入理解这些算法的工作原理,并探讨如何在实际项目中应用它们。

Python中的排序算法可以分为两类:内建排序和自定义排序。内建排序包括sort()和sorted()函数,可以直接对列表进行排序。而自定义排序则需要我们自己编写比较函数,并使用内建的sorted()函数进行排序。
1. 内建排序

  • sort()函数
    sort()函数是列表的一个方法,可以直接修改原列表。它采用就地排序(in-place sorting),即直接修改原列表,而不是返回一个新的排序列表。sort()函数默认按照升序排序,也可以通过参数reverse=True进行降序排序。
    1. list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
    2. list.sort() # 升序排序
    3. print(list) # 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
    4. list.sort(reverse=True) # 降序排序
    5. print(list) # 输出:[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
  • sorted()函数
    sorted()函数是内建函数,它会返回一个新的排序列表,而不会修改原列表。sorted()函数默认按照升序排序,也可以通过参数reverse=True进行降序排序。sorted()函数可以接受一个可选的key参数,用于指定一个函数,用于在排序时提取每个元素的比较键值。
    1. list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
    2. sorted_list = sorted(list) # 升序排序
    3. print(sorted_list) # 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
    4. sorted_list = sorted(list, reverse=True) # 降序排序
    5. print(sorted_list) # 输出:[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
    2. 自定义排序
    当我们需要对复杂的数据结构进行排序时,可能需要自定义比较函数,并使用sorted()函数的key参数进行排序。比较函数应该接受一个参数,返回一个可用于比较的值。比较函数应该遵循严格的弱序关系,即对于任何x,y:如果x < y,则返回负数;如果x == y,则返回0;如果x > y,则返回正数。
    例如,我们有一个Person类,包含姓名和年龄属性。我们可以编写一个比较函数,按照年龄升序对Person对象进行排序:
    ```python
    class Person:
    def init(self, name, age):
    self.name = name
    self.age = age
    def compare_by_age(person):
    return person.age
    people = [Person(‘Alice’, 25), Person(‘Bob’, 30), Person(‘Charlie’, 20)]
    sorted_people = sorted(people, key=compare_by_age)
    print(sorted_people) # 输出:[Person(‘Charlie’, 20), Person(‘Alice’, 25), Person(‘Bob’, 30)]