找出最小值,在剩余的选项中找最小,直到列表全部找完
public static int[] selectSort(int[] datas){
int[] tempdatas = datas;
for(int i=0;i<datas.length;i++){
int min = min(tempdatas);
tempdatas = findDatas(tempdatas,min);
datas[i] = min;
}
return datas;
}
public static int[] findDatas(int[] datas,int min){
List<Integer> list = new ArrayList<Integer>();
int k = 0;
for(int i=0;i<datas.length;i++){
if(datas[i]!=min){
list.add(new Integer(datas[i]));
} else {
if (k>0) {
list.add(new Integer(datas[i]));
}
k++;
}
}
int[] result = new int[list.size()];
for(int i=0;i<list.size();i++){
result[i] = list.get(i);
}
return result;
}
public static int min(int[] datas){
int m = datas[0];
int n;
for(int i=1;i<datas.length;i++){
n = datas[i];
if(n<m){
m = n;
}
}
return m;
}
这种代码 看起来可行 但是罗嗦了一点 没有简洁的风格 并且增加了不必要数据结构 每次都保存了剩余列表
所以 我们需要改造一下
public static int[] selectSort2(int[] datas){
int min = 0;
int t = 0;
for(int i=0;i<datas.length;i++){
min = i;
// 查找最小值所在的数组位置
for(int j=i+1;j<datas.length;j++){
if(datas[min]>datas[j]){
min = j;
}
}
// 交换数据,将最小的数据交换至相应的位置
if(min!=i){
t = datas[i];
datas[i] = datas[min];
datas[min] = t;
}
}
return datas;
}
不光代码 锐减,而且简洁 明了,抛开计算最小值的比较而言,时间复杂度为n-1