优草派  >   Python

图文讲解选择排序算法的原理及在Python中的实现

孙慧敏            来源:优草派

选择排序(Selection Sort)是一种简单直观的排序算法,其原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,并将其放在序列的起始位置,直到全部待排序的数据元素排完。在本文中,我们将从多个角度探讨选择排序算法的原理及在Python中的实现。

1. 算法原理

图文讲解选择排序算法的原理及在Python中的实现

选择排序的基本思想是:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录交换位置;接着对不包括第一个记录以外的其他记录进行第二轮比较,得到最小的记录并与第二个记录交换位置;重复该过程,直到进行比较的记录只剩下一个为止。

下面是选择排序的具体实现过程:

1. 在未排序序列中找到最小元素,存放到排序序列的起始位置;

2. 再从剩余未排序元素中继续寻找最小元素,放到已排序序列的末尾;

3. 重复第二步,直到所有元素均排序完毕。

例如,对于数组[64, 25, 12, 22, 11],选择排序的过程如下:

首先,在数组中找到最小的元素11,将其与数组的第一个元素64交换位置,得到[11, 25, 12, 22, 64];

然后,在除第一个元素以外的剩余元素中找到最小的元素12,将其与数组的第二个元素25交换位置,得到[11, 12, 25, 22, 64];

接着,在除前两个元素以外的剩余元素中找到最小的元素22,将其与数组的第三个元素25交换位置,得到[11, 12, 22, 25, 64];

然后,在除前三个元素以外的剩余元素中找到最小的元素25,将其与数组的第四个元素25交换位置,得到[11, 12, 22, 25, 64];

最后,在除前四个元素以外的剩余元素中找到最小的元素64,将其与数组的第五个元素64交换位置,得到[11, 12, 22, 25, 64];

至此,数组已经排序完成。

2. 时间复杂度

选择排序的时间复杂度为O(n^2),其中n为待排序序列的长度。这是因为在每次循环中,需要进行n-i次比较,以找到最小的元素,再进行一次交换操作。因此,总共需要进行(n-1)+(n-2)+...+1 = n*(n-1)/2次比较和n-1次交换,时间复杂度为O(n^2)。

3. 稳定性

选择排序是一种不稳定的排序算法,因为在每次比较中,都是选择最小(或最大)的元素进行交换,可能会破坏相同元素之间的相对位置关系。

4. Python实现

下面是Python中选择排序算法的实现代码:

def selection_sort(arr):

n = len(arr)

for i in range(n):

min_idx = i

for j in range(i+1, n):

if arr[j] < arr[min_idx]:

min_idx = j

arr[i], arr[min_idx] = arr[min_idx], arr[i]

return arr

arr = [64, 25, 12, 22, 11]

print(selection_sort(arr))

运行结果为[11, 12, 22, 25, 64],与上面的例子一致。

5. 总结

选择排序是一种简单直观的排序算法,其基本思想是每次选择最小(或最大)的元素进行交换。虽然时间复杂度较高,但是在数据量较小的情况下,其实现简单,易于理解,是一种常用的排序算法。在Python中,我们只需要使用两个for循环即可实现选择排序算法。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行