java中数组的排序——选择排序的两种方式比较

java中数组的排序——选择排序的两种方式比较

NumSort.java

//数组排序
public class NumSort {
	public static void main(String[] args) {
		//拿到args数组的长度,为a数组的空间大小
		int[] a = new int[args.length];
		
		for (int i=0; i<args.length; i++) {
			//将args数组中的值转换为int
			a[i] = Integer.parseInt(args[i]);
		}
		
		System.out.println("排序前");
		//打印数组a
		print(a);
		
		//选择排序数组a
		selectionSort(a);
		
		System.out.println("排序后");
		//打印数组a
		print(a);
	}
	
	//打印数组a
	private static void print(int[] a) {
		for(int i=0; i<a.length; i++) {
			System.out.print(a[i] + " ");
		}
		System.out.println();
	}
	
	//选择排序数组a
	/*
		分析算法:
		排序前	2 4 1 3 8 7 6 5 9 0
				_
		i=0		1 4 2 3 8 7 6 5 9 0
				0 4 2 3 8 7 6 5 9 1
				  _
		i=1		0 2 4 3 8 7 6 5 9 1
				0 1 4 3 8 7 6 5 9 2
				    _
		i=2		0 1 3 4 8 7 6 5 9 2
				0 1 2 4 8 7 6 5 9 3
				      _
		i=3		0 1 2 3 8 7 6 5 9 4
						_
		i=4		0 1 2 3 7 8 6 5 9 4
				0 1 2 3 4 8 6 5 9 7
						  _
		i=5		0 1 2 3 4 7 6 5 9 8
				0 1 2 3 4 6 7 5 9 8
				0 1 2 3 4 5 7 6 9 8
							_
		i=6		0 1 2 3 4 5 6 7 9 8
							  _
		i=7		0 1 2 3 4 5 6 7 9 8
								_
		i=8		0 1 2 3 4 5 6 7 8 9
								  _
		i=9		0 1 2 3 4 5 6 7 8 9
	*/
	private static void selectionSort(int[] a) {
		//拿出第一个数a[i]和后面的每一个数进行比较
		for(int i=0; i<a.length; i++) {
			//下一个数a[j]
			for(int j=i+1; j<a.length; j++) {
				//从小到大进行排列,如果第一个数大于后面的数,则交换
				if(a[j] < a[i]) {
					int temp = a[i];
					a[i] = a[j];					
					a[j] = temp;
				}
			}
		}
	}
	
	//选择排序的算法优化,最小的值只交换一次,位置交换
	/*
		可读性和效率
		分析算法:
					0 1 2 3 4 5 6 7 8 9
                    - - - - - - - - - - 					
		排序前		2 4 1 3 8 7 6 5 9 0
		i=0,k = 0	
				2
				9
					0 4 1 3 8 7 6 5 9 2
		i=1,k = 1
				2	
					0 1 4 3 8 7 6 5 9 2
		i=2,k = 2	
		    	3
				9
					0 1 2 3 8 7 6 5 9 4
		i=3,k = 3	
		i=4,k = 4
				5
				6
				7
				9
					0 1 2 3 4 7 6 5 9 8
		i=5,k = 5
				6
				7
					0 1 2 3 4 5 6 7 9 8
		i=6,k = 6
		i=7,k = 7
		i=8,k = 8
				9
					0 1 2 3 4 5 6 7 8 9
				
	*/
	private static void selectionSort2(int[] a) {
		int k, temp;
		for(int i=0; i<a.length; i++) {
			//k为最小的数的位置
			k = i;
			for(int j=k+1; j<a.length; j++) {
				if(a[j] < a[k]) {
					//将数的位置调换
					k = j;
				}
			}
			//如果k的位置不等于i的位置,交换
			if(k != i) {
				temp = a[i];
				a[i] = a[k];
				a[k] = temp;
			}
		}
	}

}
F:\java>javac NumSort.java

F:\java>java NumSort 2 4 1 3 8 7 6 5 9 0
排序前
2 4 1 3 8 7 6 5 9 0
排序后
0 1 2 3 4 5 6 7 8 9

F:\java>

猜你喜欢

转载自mfcfine.iteye.com/blog/2383702