选择排序
算法描述:选择排序的思想是初始化最小索引为0,每趟遍历选出最小的元素与最小索引的值进行交换,然后是最小索引加1,第二趟遍历出剩下元素中最小的元素,继续与当前索引的元素交换,依次类推,直到所有元素排列完成。相比于冒泡排序,选择排序的优点在于每次遍历只需要交换1次。
算法时间复杂度:最好情况:O(N^2);最坏情况:O(N^2);平均情况:O(N^2)
算法空间复杂度:O(1)
算法稳定性:由于选择排序会直接将前面的元素与后面较小的元素交换,因此选择排序是不稳定的,例如数组3,7,3,2,8,第一个3会于2交换,被交换到第二个3后面。
算法实现:选择排序SelectSort的实现如下:
/**
* 选择排序
*
* @author limin
* @date 2020/11/15
*/
public class SelectSort {
public static void selectSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int minIndex;
for (int i = 0; i < arr.length - 1; i++) {
minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(arr, minIndex, i);
}
}
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}