思想
每一次遍历待排序的序列,记录最小(大)值的下标,和待排序第一个元素进行比较,如果小(大)与待排序第一个元素,交换
实现(java)
/**
* @Author: fanjiajia
* @Date: 2019/3/1 下午9:05
* @Version: 1.0
* @Description:选择排序
*/
public class Main {
public static void main(String[] args) {
int[] arr = {2,5,4,3,8,6,4};
selectSort(arr);
for (int i = 0; i< arr.length; i++){
System.out.print(arr[i] + ",");
}
}
/**
* 选择排序
* @param arr
*/
private static void selectSort(int[] arr) {
for (int i = 0,k =0; i < arr.length; i++, k = i){
// 这一层查找后面最小值的下标
for (int j = i+1; j <arr.length; j++) {
if (arr[k] > arr[j]) { // 这个改为小与符合即为从大到小
k = j;
}
}
// 交换值
if( i != k) {
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
}
}
分析
- 时间复杂度:$O(N^2)$
- 空间复杂度: $O(1)$
- 稳定性: 不稳定