选择排序 java
选择排序理论:

1.选择排序分为有序区和无序区
2.有序区初始为没有,第一趟找出最小的元素,与第一个元素进行交换,依次类推
3.一个进行n-1趟排序
4.首先,需要进行遍历n次找出最小,也需要进行n次比较,故时间复杂度为n^2
代码:
package lianxi;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
class SelectionSort{
private final int SIZE = 20; // 定义排序序列的长度。调试阶段可以把这个值调小以方便调试。
private final int MAX = 99; //定义排序序列的最大值
public static void main(String[] args){//主函数入口				选择排序
	SelectionSort ss = new SelectionSort();		//创建对象
	List<Integer> data = ss.dataGenerator();
	// 把数字打印出来可以帮助调试程序
	System.out.print(" 未排序前: ");
	ss.print(data); 
	ss.sort(data);
	System.out.print(" 排序后: ");
	ss.print(data);
	if(ss.test(data)){
		System.out.println(" 排序成功 !");
	}
	else{
		System.out.println(" 排序不成功 !");
	}
	
}
/*
数据生成函数
*/
public List<Integer> dataGenerator(){
	List<Integer> data = new ArrayList<Integer>();
	Random generator = new Random(System.currentTimeMillis());//获取系统时间
	for(int i = 0; i < SIZE; i++){
		data.add(generator.nextInt(MAX));//长度小于我们设置的长度时往data数组中添加数据
	}
	return data;
}
/*
测试排序结果是否正确
*/
public boolean test(List<Integer> nums){
	for(int i = 0 ; i < SIZE - 1; i++){//检查i和i+1是否递增
		if(nums.get(i) > nums.get(i+1)){
			return false;
		}
	}
	return true;
}
/*
打印排序的序列
*/
public void print(List<Integer> nums){
	System.out.println(" ");
	for(int i = 0; i < SIZE; i++){
		System.out.print(nums.get(i)+ " ");//根据数组下标分别空一格输出内容
	}
	System.out.println(" ");
}
/*
排序的实现
*/
public List<Integer> sort(List<Integer> nums){
	for(int i = 0;i < SIZE;i++){
		int min =i;
		for(int j = i+1;j < SIZE;j++){
			if(nums.get(min) > nums.get(j)){//找到最小数并交换位置
				int num = nums.get(j);//get()通过索引值获取动态数组中的元素
				nums.set(j, nums.get(min));//set()用于替换动态数组中指定索引的元素
				nums.set(min, num);
			}
		}
	}
	return nums;
}
}
                    
                
                
            
        
浙公网安备 33010602011771号