选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是每次从待排序的数据中选择最小(或最大)的元素,放到已排序序列的末尾,直到所有元素排序完成。
具体步骤如下:
- 遍历待排序序列,将当前位置设为最小元素的位置;
- 在剩余未排序序列中找到最小的元素,将其与当前位置交换;
- 当前位置后移一位,继续执行步骤2,直到所有元素排序完成。
选择排序的时间复杂度为O(n^2),是一种较慢的排序算法。但由于其实现简单,适用于小规模数据的排序。
以下是选择排序的实现代码,使用C语言为例:
#include <stdio.h>
void selectionSort(int arr[], int n) {
int i, j, minIndex, temp;
for (i = 0; i < n-1; i++) {
minIndex = i;
// 在未排序部分中找到最小的元素
for (j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 将最小元素与当前位置交换
temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
selectionSort(arr, n);
printf("\nSorted array:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
运行结果如下:
Original array:
64 25 12 22 11
Sorted array:
11 12 22 25 64
选择排序的时间复杂度是O(n^2),其中n是数组的长度。
遍历两层,复杂度较高
选择排序是一种简单直观的排序算法。它的基本思想是每次从待排序的数据中选择最小(或最大)的元素,放到已排序序列的末尾,直到全部数据排序完成。
具体步骤如下:
- 遍历待排序序列,找到最小(或最大)的元素。
- 将该元素与序列的第一个元素交换位置。
- 接着在剩下的元素中找到最小(或最大)的元素,将其与序列的第二个元素交换位置。
- 以此类推,直到所有的元素都排好序。
选择排序的时间复杂度为O(n^2),其中n是待排序序列的长度。尽管选择排序的时间复杂度较高,但由于其排序过程简单,是一种适用于小规模数据的排序算法。
以下是使用Python实现选择排序的示例代码:
def selection_sort(arr):
n = len(arr)
for i in range(n-1):
min_index = i
for j in range(i+1, n):
if arr[j] < arr[min_index]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
# 测试
data = [4, 2, 7, 1, 5]
sorted_data = selection_sort(data)
print(sorted_data) # 输出:[1, 2, 4, 5, 7]
在上述代码中,我们通过两层循环来实现选择排序。外层循环控制选择的起始位置,内层循环用于查找最小元素的索引。在找到最小元素后,我们使用Python的交换语法将其与起始位置的元素交换位置。