欢迎访问宙启技术站
智能推送

Python实现选择排序算法

发布时间:2023-12-04 09:01:07

选择排序(Selection Sort)是一种简单直观的排序算法,它的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

选择排序的实现比较简单,首先从待排序的序列中找到最小元素,将它与序列的 个元素交换位置;然后,在剩下的序列中找到最小元素,将它与序列的第二个元素交换位置;以此类推,最终得到一个有序的序列。

以下是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 是待排序的数组。我们首先通过 len(arr) 获取数组的长度,即待排序元素的个数。接下来,我们使用两层循环实现选择排序算法。外层循环控制待排序的元素数量,内层循环从当前位置的下一个位置开始,寻找更小的元素,并记录下标。如果找到更小的元素,就将其下标赋值给 min_idx。在内层循环结束后,我们将 arr[i]arr[min_idx] 的值交换,即将最小的元素放在序列的起始位置。最后,返回有序的数组 arr

下面是一个使用选择排序算法的例子:

arr = [5, 8, 2, 1, 6, 3, 4, 9, 7]
sorted_arr = selection_sort(arr)
print(sorted_arr)

运行以上代码输出的结果为 [1, 2, 3, 4, 5, 6, 7, 8, 9]。可以看到,选择排序算法成功地将无序的数组 [5, 8, 2, 1, 6, 3, 4, 9, 7] 转换成有序的数组 [1, 2, 3, 4, 5, 6, 7, 8, 9]

选择排序算法的时间复杂度是 O(n^2),其中 n 是待排序元素的个数。由于选择排序算法是一个**不稳定**的排序算法,即相同大小的元素在排序后可能会交换位置,所以在排序元素中包含相同大小的元素时,可能会产生错误的排序结果。因此,在实际应用中,为了确保排序的稳定性,我们一般不会选择选择排序算法。而是使用其他更高效的排序算法,比如快速排序、归并排序等。