一.算法思想
每⼀趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列。n个元素的简单选择排序需要 n-1 趟处理
- 新建一个索引loc为标记索引,用于保存最小值的索引。
- 将第i个元素索引用loc保存,将loc索引所在元素和剩下元素一一比较,将其中的较小值用loc保存其索,遍历结束后可以取得最小值的索引loc
- 将索引为loc的元素和第i个元素进行位置交换,重复步骤2从第二个元素继续,直到遍历完成。
二.代码实现
package Sort;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] a={49,38,65,97,76,13,27,49};
selectSort(a);
}
public static void selectSort(int[] a){
for (int i=0;i<a.length-1;i++){ //共需进行a.length-1趟交换
int loc=i; //假设最小元素的下标为i
for (int j=i;j<a.length-1;j++){ //从第i个元素开始找到最小元素的下标
if(a[j+1]<a[j]){
loc=j+1;
}
}
//找到最小元素的下标后将此元素与第i个元素交换,交换完成后进行下一趟排序
int temp=a[i];
a[i]=a[loc];
a[loc]=temp;
System.out.println("第"+(i+1)+"趟排序的结果为"+Arrays.toString(a));
}
}
}
三.运行结果
四.算法性能
- 空间复杂度:O(1)
- 时间复杂度:O ((n*n)
- 稳定性:不稳定
- 适⽤性:既可以用于顺序表,也可用于链表