选择排序是一种简单直观的排序算法,其基本思想是每次从未排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
选择排序的具体步骤如下:
设定初始值:
定义数组和其长度。
循环选择:
使用两层循环,外层循环控制排序的趟数,内层循环用于在未排序的部分找出最小值。
交换元素:
将找到的最小值与当前趟数的起始位置交换。
具体实现如下:
```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
```
示例
假设有一个数组 `[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),将其与第四个元素(64)交换。
```
[11, 12, 22, 25, 64]
```
通过以上步骤,数组最终被排序为 `[11, 12, 22, 25, 64]`。
时间复杂度
选择排序的时间复杂度为 \(O(n^2)\),其中 \(n\) 是待排序序列的长度。这是因为在每一轮选择过程中,都需要遍历剩余未排序元素来找到最小(或最大)的元素,因此总共需要进行 \(n-1\) 轮选择,每次选择的过程需要遍历的元素个数分别为 \(n\)、\(n-1\)、\(n-2\)、…、1。
特点
简单直观:选择排序是一种简单直观的排序算法,容易理解和实现。
不稳定排序:选择排序是一种不稳定的排序算法,即可能改变相同元素的相对顺序。
适用小规模数据:由于时间复杂度较高,选择排序适用于小规模的数据排序。
总的来说,选择排序虽然简单,但在处理大规模数据时效率较低,因此在实际应用中较少使用。