选择排序:
选择排序主要思想是先选取序列中的最大值,放在序列首位,再选取除去序列首位的序列中的最大值,放在第二位,以此类推实现排序。
下面举一个从大到小排序的例子:(红色的表示已经排好序的,蓝色的表示此次排序所交换的数字)
如1,5,2,8,1,9,2,4
第一趟排序后结果: 9,5,2,8,1,1,2,4
第二趟排序后结果: 9,8,2,5,1,1,2,4
第三趟排序后结果: 9,8,5,2,1,1,2,4
第四趟排序后结果: 9,8,5,4,1,1,2,2
第五趟排序后结果: 9,8,5,4,2,1,1,2
第六趟排序后结果: 9,8,5,4,2,2,1,1
第七趟排序后结果: 9,8,5,4,2,2,1,1
第八趟排序后结果: 9,8,5,4,2,2,1,1
结束
可以看出选择排序是不稳定的,如第一趟排序后两个1的相对位置发生了变化
Java代码实现
class selectSort{
private int[] nums;
public void sort(){
for(int i=0;i<nums.length;i++){
int temp=-1;//保存最大值的索引
int max =nums[i];//保存最大值
for(int j=i;j<nums.length;j++){
if(max<nums[j]){
temp=j;
max = nums[j];
}
}
if(temp!=-1){
change(i,temp);
}
}
}
public void change(int i,int j){
int num=0;
num = nums[i];
nums[i] = nums[j];
nums[j] = num;
}
public int[] selectSort(int[] nums){
this.nums = nums;
sort();
return nums;
}
public void print(){
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]+",");
}
}
}
public class select_sort{
public static void main(String[] args){
int[] numbers = {1,0,8,5,4,2};
selectSort ss = new selectSort();
ss.selectSort(numbers);
ss.print();
}
}