`

【算法】直接选择排序

 
阅读更多
直接选择排序的思路很简答,需要经过n-1趟比较。
优点:算法简答,容易实现。
缺点:每趟只能确定一个元素,n个数组需要进行n-1趟比较。
package com.syc.crazejava.chapter12;

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 com.syc.crazejava.chapter12;


public class SelectSort {

	public static void selectSort(DataWrap[] data){
		System.out.println("开始排序");
		int arrayLength = data.length;
		for(int i=0;i<arrayLength-1;i++){
//			int minIndex = i;
			for(int j=i+1;j<arrayLength;j++){
				if(data[i].compareTo(data[j])>0){
					DataWrap tmp = data[i];
					data[i] = data[j];
					data[j] = 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));
	}
}


       从上面直接选择排序算法可以看出,直接选择排序算法的关键就是n-1趟比较,每趟比较的目的就是选择出本趟比较中最小的数据,并将该数据放在本趟比较的第1位。从这里的描述不难发现,其实直接选择排序的每趟比较最多只需交换一次就够:只要找到本趟比较中最小的数据,然后拿它和本趟比较中第1位的数据交换。
package com.syc.crazejava.chapter12;

public class SelectSort2 {
	public static void selectSort(DataWrap[] data){
		System.out.println("开始排序");
		int arrayLength = data.length;
		for(int i=0;i<arrayLength -1;i++){
			int minIndex = i;
			for(int j=i+1;j<arrayLength;j++){
				if(data[minIndex].compareTo(data[j])>0){
					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(26,""),
			new DataWrap(9,"")
		};
		
		System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
		selectSort(data);
		System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
	}
}

    
  • 大小: 10 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics