java基础-选择排序

找出最小值,在剩余的选项中找最小,直到列表全部找完

	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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值