选择排序:
思想: 每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕
代码实现:
package test;
/**
* 选择排序
*
* @author 欧阳
* @date 2022/3/8
*/
public class Demo07 {
public static void sort(int[] arr) {
int k = 0;
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
k = i;
for (int j = i + 1; j < arr.length; j++) { // 选最小的记录
if (arr[k] > arr[j]) {
k = j; //记下目前找到的最小值所在的位置
}
}
if (k != i) {
//交换位置
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
}
}
测试:
public static void main(String[] args) {
int n = 10;
int[] arr = new int[n];
for (int k = 0; k < n; k++) {
Integer l = (int) (n * Math.random()); //随机生成0-100的数
arr[k] = l;
}
System.out.println("排序前:" + Arrays.toString(arr));
sort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
结果:
排序前:[3, 4, 4, 1, 5, 2, 1, 7, 0, 5]
排序后:[0, 1, 1, 2, 3, 4, 4, 5, 5, 7]
选择排序的时间复杂度:简单选择排序的比较次数与序列的初始排序无关。当序列正序时,移动次数最少,为 0。当序列反序时,移动次数最多。综上,选择排序的时间复杂度为 O(N2)。