思路
- 对数组进行遍历,从索引为1开始,比较当前索引和0索引处的值大小,如果比0索引处位置小(或大)则交换位置,那么第一个就是最小的(或最大的),然后再进行下一次遍历
- 因为第一次遍历已经把最小的(或最大的)放到了第一个,所以第二次遍历从索引为2开始,和1索引处的值进行比较
- 以此类推,直到所有元素均排序完毕
Code
public class SelectionSort {
public void sort(int[] arr) {
if (ArrayUtils.isEmpty(arr) || arr.length == 1) {
return;
}
int len = arr.length;
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
private void swap(int[] arr, int index, int target) {
int temp = arr[index];
arr[index] = arr[target];
arr[target] = temp;
}
}
-
时间复杂度:O(N^2)
-
空间复杂度:O(1)
-
稳定性:不稳定