排序算法传送:
排序算法——java实现冒泡排序
排序算法——java实现选择排序
排序算法——java实现直接插入排序
排序算法——java实现二分法排序
排序算法——java实现希尔排序
排序算法——java实现快速排序
选择排序
1、算法思想
(1)找到所有数中最小值下标
(2)第一趟循环将最小值的下标与第一个位置的数值交换位置,这样每次找到的最小值则固定到第一个
(3)第二趟循环从第二个开始继续上边的步骤,因为上一趟已经将最小的找到并放到了第一个的位置,因此第二趟只需从第二个数值开始比较。
2.代码实现:
public static void selectionSort(int[] nums) {
if (nums == null || nums.length < 2) {
return;
}
for(int i = 0; i < nums.length - 1; i++) {
for(int j = i + 1; j < nums.length; j++) {
if(nums[i] > nums[j]) {
swap(nums, i, j);
}
}
}
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
3.复杂度:
- 时间复杂度:O(n²)
- 空间复杂度:O(1),只需要一个附加程序单元用于交换
- 稳定性:选择排序是不稳定的排序算法,因为无法保证值相等的元素的相对位置不变,例如 [3, 4, 3, 1, 5]这个数组,第一次交换,第一个3和1交换位置,此时原来两个3的相对位置发生了变化。