《算法与数据结构:选择排序算法》
选择排序算法
简介
选择排序是一种简单直观的排序算法。它的工作原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法(即相同的元素可能在排序后的序列中有不同的顺序)。
算法原理
选择排序算法的主要步骤如下:
- 在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置。
- 从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕。
算法演示
假设有一个未排序的数组:[5, 3, 6, 2, 10]
步骤 | 当前数组状态 | 选中元素 |
---|
1 | 5, 3, 6, 2, 10 | 2 |
2 | 2, 3, 6, 5, 10 | 3 |
3 | 2, 3, 6, 5, 10 | 5 |
4 | 2, 3, 5, 6, 10 | 6 |
5 | 2, 3, 5, 6, 10 | 10 |
图画演示
创建一个演示数组【3,5,1,2,4】,数组长度为 5,数组表示为 nums [0,5) 左闭右开区间。
动画 GIF 演示
Java 代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class SelectionSort {
public static void selectionSort(int[] nums) { int len = nums.length;
for (int i = 0; i < len; i++) { int minIndex = i; for (int j = i; j < len; j++) { if (nums[minIndex] > nums[j]) { minIndex = j; } } swap(nums, i, minIndex); } } private static void swap(int[] nums, int low, int high) { int temp = nums[low]; nums[low] = nums[high]; nums[high] = temp; } }
|
Java 范型实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class SelectionSort { public static <E extends Comparable<? super E>> void selectionSort(E[] nums) { int len = nums.length;
for (int i = 0; i < len; i++) { int minIndex = i; for (int j = i; j < len; j++) { if (nums[minIndex].compareTo(nums[j]) > 0) { minIndex = j; } } swap(nums, minIndex, i); } } private static <E extends Comparable<? super E>> void swap(E[] nums, int low, int high) { E temp = nums[low]; nums[low] = nums[high]; nums[high] = temp; temp = null; } }
|