Java的选择排序

选择排序:

选择排序主要思想是先选取序列中的最大值,放在序列首位,再选取除去序列首位的序列中的最大值,放在第二位,以此类推实现排序。

下面举一个从大到小排序的例子:(红色的表示已经排好序的,蓝色的表示此次排序所交换的数字)

如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,52,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();
	}
}


点赞