选择排序(Selection Sort)
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
算法描述
每次排序找到数组中的最小值或者最大值和当前序列的第一个值进行替换。
例子
数组: 3 44 38 5 2 47 15
第一次循环: 2 44 38 5 3 47 15
第二次循环: 2 3 38 5 44 47 15
第三次循环: 2 3 5 38 44 47 15
第四次循环: 2 3 5 15 44 47 38
第五次循环: 2 3 5 15 38 47 44
第六次循环: 2 3 5 15 38 44 47
结束
算法复杂度
空间复杂度: O(1)
时间复杂度:O(n²) 最坏结果
O(n²) 平均结果
O(n²) 最好结果
排序稳定,原来相等的两个参数,在确保获取第一个之后,不会被后面的代替,排在前面的依旧是排在前面。
代码实现
public static void selectionSort(int[] arr){
int len = arr.length;
int minIndex,temp;
for (int i=0;i< len-1;i++){
minIndex = i;
for (int j=i+1;j<len-1;j++){
if(arr[j]<arr[minIndex]){
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
System.out.println(Arrays.toString(arr));
}
}
运行结果
输入数组:int[] arr = {3,44,38,5,2,47,15};
[2, 44, 38, 5, 3, 47, 15]
[2, 3, 38, 5, 44, 47, 15]
[2, 3, 5, 38, 44, 47, 15]
[2, 3, 5, 38, 44, 47, 15]
[2, 3, 5, 38, 44, 47, 15]
[2, 3, 5, 38, 44, 47, 15]
但是按照上面的步骤,这时候我们可以看到和演算结果一致。