1.算法描述
在一个长度为 N 的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。
第二次从下一个数开始遍历 n-2 个数,找到最小的数和第二个数交换。
重复以上操作直到第 n-1 次遍历最小的数和第 n-1 个数交换,排序完成。
代码实现:
public class SelectSort { public static void Sort(int[] arr) { int n = arr.Length; for (int i = 0; i < n; i++) { int min = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[min]) { min = j; } } //将其中一个元素和其他所有未比较 过的元素对比一遍之后进行交换 int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } }
调用:
static void Main(string[] args) { int[] arr = { 3, 4, 1, 222}; SelectSort.Sort(arr); for (int i = 0; i < arr.Length; i++) { Console.WriteLine(arr[i]); } }
结果:
1
3
4
222
冒泡排序和选择排序对比
冒泡排序在对比的时候大概率会交换多次,但是选择排序在为每一个元素做对比的时候只需要记录下最小/大值的索引,最后进行交换就可以,总体来说效率比冒泡高。