第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后减少一个头元素再一次排序,存放在序列的起始位置。重复元素个数-1次,排序完成。
排序次数=元素个数-1
import java.util.Arrays;
public class Test {
public static void main(String[] args){
int a[]={101,34,119,1}; //四个元素,需要进行4-1轮排序。这三次排序需要得到三个最小值。
int min=0;
int index=0;
min=a[0];
//第一轮排序
for(int i=1;i<a.length;i++){
if(min>a[i]){
min=a[i];
index=i;
}
}
//得到第一轮的最小值,并与第一个元素发生交换
int temp; //将数组中的最小值和a[0]发生交换
temp=a[0];
a[0]=a[index];
a[index]=temp;
System.out.println("第一轮的排序的结果: ");
System.out.println(Arrays.toString(a));
//第二轮排序
index=1;
min=a[1]; //首先假设a[1]是最小值
for(int j=2;j< a.length;j++){
if(min>a[j]){
min=a[j];
index=j;
}
}
//得到了第二轮排序中的最小值元素。并将此最小值元素与第二个元素发生交换。
temp = a[1];
a[1] = a[index];
a[index]=temp;
System.out.println("第二轮的排序的结果: ");
System.out.println(Arrays.toString(a));
//第三轮排序,假设第三个数是最小的
min=a[2];
index=2;
for(int j=3;j< a.length;j++){
if(min>a[j]){
min=a[j];
index=j;
}
}
//得到了三轮排序中的最小值元素。并将此最小值元素与第三个元素发生交换。
temp = a[index];
a[index] = a[2];
a[2] = temp;
System.out.println("第三轮的排序的结果: ");
System.out.println(Arrays.toString(a));
}
}
import java.util.Arrays;
public class Test {
public static void main(String[] args){
//这个选 择排序可以进行优化。
int min1=0;
int temp1;
int b[]={101,34,119,1};
for(int i=0;i< b.length-1;i++){
min1=b[i];
int index1 = i;
for(int j=i+1;j<b.length;j++){
if(min1>b[j]){
min1=b[j];
index1=j;
}
}
//得到此轮排序后的最小值,并与最前面的发生交换
temp1 = b[i]; //b[i]表示的意思是此轮排序中排在最前面的元素。
b[i]=b[index1];
b[index1]=temp1;
}
System.out.println("优化算法后的结果是---");
System.out.println(Arrays.toString(b));
}
}
由于有很多相同和类似的代码,所以此代码语句可以进行优化。外循环对准最小值位于首位元素,内循环对准与首位比较的元素。