直接选择排序(java实现)

定义一个数据包装类:

package sorted;

public class DataWrap implements Comparable<DataWrap>{
	int data;
	String flag;
	public DataWrap(int data,String flag){
		this.data=data;
		this.flag=flag;
	}
	public String toString(){
		return data+"_"+flag;
	}
	public int compareTo(DataWrap dw){
		return this.data>dw.data ? 1:(this.data==dw.data? 0 : -1);
	}
}

直接选择算法如下:


package sorted;
/**
 * 直接选择排序在每次比较中都会找出趟最小的数据与n-1位进行交换,
 * 第n趟至多交换一次,是不稳定的排序算法
 * 时间复杂度O(n^2)
 * 空间复杂度O(1)
 */

public class SelectSort {
	public static void selectSort(DataWrap[] data){
		System.out.println("开始排序");
		int arrayLength =data.length;
		//依次进行n-1趟比较,第i趟比较将第i大的值选出放在i位置上
		for(int i=0;i<arrayLength-1;i++){
			//minIndex将永远保留本趟比较中最小值的索引
			int minIndex=i;
			//第i个数据只需要和它后面的数据比较
			for(int j=i+1;j<arrayLength;j++){
				//如果第minIndex位置的数据>位置的数据
				if(data[minIndex].compareTo(data[j])>0){
					//将j的值赋给minIndex
					minIndex=j;
				}
			}
			//每趟比较最多交换一次
			if(minIndex !=i){
				DataWrap tmp=data[i];
				data[i]=data[minIndex];
				data[minIndex]=tmp;
			}
			System.out.println(java.util.Arrays.toString(data));
		}
	}
	public static void main(String args[]){
		DataWrap[] data={
				new DataWrap(21,""),
				new DataWrap(30,""),
				new DataWrap(49,""),
				new DataWrap(30,"*"),
				new DataWrap(16,""),
				new DataWrap(9,"")
		};
		System.out.println("排序之前:\n"+java.util.Arrays.toString(data));
		selectSort(data);
		System.out.println("排序之后:\n"+java.util.Arrays.toString(data));
	}
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值