选择排序
大约 2 分钟
选择排序
选择排序是一种简单直观的排序算法。它的基本思想是:每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
步骤
选择排序的算法步骤如下:
- 在待排序的元素中,找到最小(大)的元素,将其与第一个元素交换位置。
- 在剩下的元素中,找到最小(大)的元素,将其与第二个元素交换位置。
- 重复上述步骤,直到所有元素均排序完毕。
示例
给定数组 [3, 4, 2, 1, 5],按升序排序。
- 第一次遍历,找到最小元素 1,与第一个元素 3 交换位置,数组变为 [1, 4, 2, 3, 5]。
- 第二次遍历,忽略第一个元素,找到最小元素 2,与第二个元素 4 交换位置,数组变为 [1, 2, 4, 3, 5]。
- 第三次遍历,忽略前两个元素,找到最小元素 3,与第三个元素 4 交换位置,数组变为 [1, 2, 3, 4, 5]。
- 第四次遍历,忽略前三个元素,找到最小元素 4,与第四个元素 4 交换位置,数组保持不变 [1, 2, 3, 4, 5]。
- 第五次遍历,忽略前四个元素,找到最小元素 5,与第五个元素 5 交换位置,数组保持不变 [1, 2, 3, 4, 5]。
最终得到的数组为 [1, 2, 3, 4, 5],即为按升序排序后的结果。
时间复杂度
选择排序的时间复杂度为 O(n^2),其中 n 是待排序数组的长度。
代码实现
下面是使用 Java 实现选择排序的示例代码:
public class SelectionSort {
public static void main(String[] args) {
int[] arr = {3, 4, 2, 1, 5};
selectionSort(arr);
System.out.println(Arrays.toString(arr)); // 输出:[1, 2, 3, 4, 5]
}
public static void selectionSort(int[] arr) {
int n = arr.length;
// 遍历数组
for (int i = 0; i < n-1; i++) {
int minIndex = i;
// 寻找最小元素的索引
for (int j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换最小元素与当前元素的位置
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}
以上代码实现了选择排序的排序算法和排序结果的输出。