排序算法——选择排序
public class Selector implements ISortAble{
@Override
public void sort(int[] a) {
int n=a.length;
for(int i=0;i<n;i++){
int k=i;
for(int j=i+1;j<n;j++){
if(a[k]>a[j]){
int t=a[k];
a[k]=a[j];
a[j]=t;
}
}
}
}
public static void main(String[] args) {
int[] a = { 0, 3, 6, 8, 2, 4, 6, 9, 7, 5 };
new Selector().sort(a);
System.out.println(Arrays.toString(a));
}
}
简单选择排序算法的性能
排序类别 | 排序方法 | 时间复杂度 | 空间复杂度 | 稳定性 | 复杂性 | ||
平均情况 | 最坏情况 | 最好情况 | |||||
选择排序 | 简单选择排序 | O(N2) | O(N2) | O(N2) | O(1) | 不稳定 | 简单 |
时间复杂度
简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数总是N (N - 1) / 2。
而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0.
当序列反序时,移动次数最多,为3N (N - 1) / 2。
所以,综合以上,简单排序的时间复杂度为 O(N2)。
空间复杂度
简单选择排序需要占用 1 个临时空间,在交换数值时使用。