CS2L13——选择排序
选择排序
选择排序(selection sort)的工作原理非常简单:开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序区间的末尾。
设数组的长度为 n,选择排序的步骤为:
- 初始状态下,所有元素未排序,即未排序(索引)区间为 [0,n−1] 。
- 选取区间 [0,n−1] 中的最小元素,将其与索引 0 处的元素交换。完成后,数组前 1 个元素已排序。
- 选取区间 [1,n−1] 中的最小元素,将其与索引 1 处的元素交换。完成后,数组前 2 个元素已排序。
- 以此类推。经过 n−1 轮选择与交换后,数组前 n−1 个元素已排序。
- 仅剩的一个元素必定是最大元素,无须排序,因此数组排序完成。
步骤简记为:新建中间变量、依次比较、找出极值(最大或最小)、放入目标位置、比较 n 轮
选择排序的实现
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 32 33 34 35 36
| static void SelectionSort(int[] arr) { for (int m = 0; m < arr.Length; m++) { int index = 0; for (int n = 1; n < arr.Length - m; n++) { if (arr[index] < arr[n]) { index = n; } } if (index != arr.Length - 1) { int temp = arr[index]; arr[index] = arr[arr.Length - 1 - m]; arr[arr.Length - 1 - m] = temp; } } }
static void Main(string[] args) { int[] arr = new int[] { 8, 7, 1, 5, 4, 2, 6, 3, 9 }; SelectionSort(arr); for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + " "); } }
|
输出: