思想:
从待排序的数据中线性查找寻找最小值,将其与序列最左边的数字进行交换,重复此操作。
时间复杂度:
O(n²)
代码实现
核心代码:
/*
* 选择排序
* */
public class SelectionSort {
public int[] sort(int[] a){
System.out.println("选择排序ing……");
//遍历 数组 ,准备排序
for (int i = 0;i < a.length;i++){
//记录下第一个的下标
int minIndex = i;
for (int j = i+1;j < a.length;j++){
//遍历后面的数,寻找最小值的下标
if (a[minIndex] > a[j]){
minIndex = j;
}
}
//每一次遍历完成,交换当前位置的元素和最小元素交换
if (minIndex != i){
int temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;
}
}
return a;
}
}
测试:
public class SelectionTest {
public static void main(String[] args) {
int[] a = new int[]{2,3,4,1,12,6,9,0,13,100,2,5};
SelectionSort selectionSort = new SelectionSort();
System.out.println("排序前的数组"+Arrays.toString(a));
selectionSort.sort(a);
System.out.println("排序前后的数组"+Arrays.toString(a));
}
}
结果:
排序前的数组[2, 3, 4, 1, 12, 6, 9, 0, 13, 100, 2, 5]
选择排序ing……
排序前后的数组[0, 1, 2, 2, 3, 4, 5, 6, 9, 12, 13, 100]