思想
从头到尾扫描序列,找到最小的一个元素,与第一个元素交换,接着在剩下的元素中继续找最小交换,使得最终有序
步骤
1.选择第1小的元素,放在第一个位置
2.选择第2小的元素,放在第二个位置
3.直到所有元素均排序
例子
动画
算法
package alg.sort;
public class SelectSort {
public void sort(int[] A){
int n = A.length;
for(int i=0;i<n;i++){
int minid = i; // 选择最小元素的id
for(int j=i+1;j<n;j++){
if(A[j]<A[minid])
minid = j;
}
int tmp = A[i];
A[i] = A[minid];
A[minid] = tmp;
}
}
public static void main(String[] args){
int[] A = new int[]{49,38,65,97,76,13,27,49};
Print.printArray(A);
SelectSort selectSort = new SelectSort();
selectSort.sort(A);
Print.printArray(A);
}
}
复杂度分析
(1)时间复杂度
无论怎么样,在寻找最小值的id时候都要扫描该部分所有元素,故时间复杂度为
O(n2)
(2)空间复杂度
O(1)
参考
1.《数据结构高分笔记》
2. 链接