Python 中不同排序技术的变体

2024 年 8 月 29 日 | 阅读 6 分钟

什么是排序?

排序将数据按特定顺序排列的技术。它将数值数据按升序或降序排列。它用于以更易于理解的、更简单的方式表示数据。基于排序技术,人们开发了各种算法。

Python 中的排序技术及其变体

Python 中有各种排序技术。它们是:

  • 选择排序
  • 插入排序
  • 冒泡排序
  • 希尔排序
  • 合并排序
  • 快速排序

除了这些排序算法之外,Python 中还有不同的排序变体。这些技术包括行为不同的各种排序函数。

让我们通过不同的示例深入了解这些变体。

  1. sort( )
  2. sorted( )
  3. argsort( )
  4. lexsort( )

1) sort( )

此函数用于就地排序数组。这意味着它直接修改数组或列表。它会改变元素的原始顺序。它不会创建输入数组或列表的副本。它的返回类型是 None,这意味着它不返回任何内容。这是一种更快的数组排序方法。由于它直接排序输入,因此占用的空间更少。

Python 中 sort( ) 函数的基本语法

此处,

  • inp_arr 是输入可迭代对象的名称,包括数组、列表、元组等,我们想对其进行排序。
  • sort( ) 是 Python 中用于排序不同元素的函数

sort 方法接受两个可选参数。这些参数不是 sort( ) 方法必需的。

  • reverse 是一个参数,用于指定输入要排序的顺序(升序或降序)。它接受布尔值(True 或 False)。默认情况下,它设置为 False,即默认按升序排序输入。reverse 参数设置为 True 值将按降序对数组进行排序。
  • key 指定用于相应排序输入数组或列表的详细标准。

让我们通过在 Python 中实现来理解 sort( )。

升序

代码

输出

Unsorted Array: [99, 3, 56, 22, 15, 0]
Sorted Array: [0, 3, 15, 22, 56, 99]

说明

我们使用sort( ) 方法按升序对数组进行了排序。此方法不会创建数组的副本;它只是对原始输入数组进行排序。

降序

代码

输出

Unsorted Array: [90, 13, 46, 82, 5, 1000]
Sorted Array: [1000, 90, 82, 46, 13, 5]

说明

我们使用sort( ) 方法按降序对数组进行了排序。我们将 reverse 参数设置为 False,这会将数组按降序排序。此方法不会创建数组的副本;它只是对原始输入数组进行排序。

2) sorted( )

这是另一种排序数组的方法。与 sort( ) 方法不同,它会创建输入列表的副本,然后对其进行排序,并返回新的已排序数组或列表。由于它创建了输入数组的副本,因此占用的空间更多。它会在排序后返回列表。它比 sort( ) 方法慢。

Python 中 sorted() 方法的基本语法

这里,

  • sorted_list 是排序后的输出可迭代对象。
  • sorted( ) 是 Python 中用于排序各种元素的函数

sorted( ) 方法接受 3 个参数,其中两个是可选的,一个是必需的。

  • inp_list 是输入可迭代对象,包括列表、元组、字典、数组等,我们想对其进行排序。这是该方法必需的参数。
  • reverse 是一个可选参数,用于指定输入要排序的顺序(升序或降序)。它接受布尔值(True 或 False)。默认情况下,它设置为 False,即默认按升序排序输入。reverse 参数设置为 True 值将按降序对数组进行排序。
  • key 是另一个可选参数,用于指定需要排序输入的顺序。默认情况下,它没有值。

让我们通过在 Python 中实现来理解 sorted( ) 方法。

升序

代码

输出

Unsorted Array: [199, 1223, 145, 256, 67, 89, 0]
Sorted Array [0, 67, 89, 145, 199, 256, 1223]

说明

使用sorted( ) 方法,我们已按升序对数组进行了排序。首先,我们将定义一个输入数组,然后创建一个对象,该对象将复制原始数组,对其进行排序,并返回已排序的副本元素。

降序

代码

输出

Unsorted Array: ('a', 'c', 'z', 'abccd', 'p', 'pillow', 'i')
Sorted Array: ['pillow', 'abccd', 'a', 'c', 'z', 'p', 'i']

说明

使用sorted( ) 方法,我们已按降序对字符串数组进行了排序。首先,我们将定义一个输入数组,然后创建一个对象来复制原始数组。我们将 reverse 值设置为 False,这将根据数组中元素的长度(因为 key 参数设置为 len(长度))按降序对数组进行排序。然后,它将在排序后返回输出数组。

3) argsort( )

此方法是 Python 中使用的另一种排序技术。argsort( ) 方法间接对输入数组进行排序,并返回与输入数组形状相同的已排序数组的索引。它占用的空间更多,因为会返回一个包含已排序数组索引的新数组。

argsort( ) 方法的基本语法是:

这里,

  • inp_arr 是需要排序的输入数组

argsort( ) 接受一些可选参数,如下所示:

  • axis 是要 along 排序数组的轴。默认情况下,它设置为 -1。如果值为 None,则使用展平后的数组。
  • kind 指定要根据其对数组进行排序的排序算法类型。
  • order 指定需要排序的数组字段

让我们通过在 Python 中实现来理解 argsort( )。

代码

输出

Unsorted Array: [19, 129, 153, 326, 41, 93, 10]
Sorted Indices [6 0 4 5 1 2 3]
Sorted Array: [ 10  19  41  93 129 153 326]

说明

使用argsort( ) 方法,我们已按升序对数组进行了排序。首先,我们将定义一个输入数组,然后创建一个对象来复制原始数组,对其进行排序,并返回已排序数组的索引。然后,我们定义另一个数组,该数组将从索引复制已排序数组,然后打印已排序数组。

lexsort( )

此方法还用于使用一组键间接对元素进行排序。它可以一次对多个数组进行排序。我们需要两个输入可迭代对象来进行 lexsort( ) 排序。首先,它将按第一个数组排序,然后按第二个数组排序。结果是返回一个包含已排序键索引的数组。

lexsort( ) 函数的基本语法是:

这里,

  • lexsort( ) 是 Python 中用于对多个数组进行排序的函数
  • keys 是要排序的列。
  • axis 是一个可选参数,用于指定需要间接排序的轴。

让我们通过在 Python 中实现来理解 lexsort( )。

代码

输出

Unsorted Array:
[10 23  4 67] [ 3 56 78  2]
Sorted Indices: [2 0 1 3]
Sorted Array: [(4, 78), (10, 3), (23, 56), (67, 2)]

说明

使用lexsort( ) 方法,我们已按升序对两列进行了排序。首先,它将对 col1 进行排序,然后对 col2 进行排序,并相应地打印索引。