Java算法学习

package com.tang.flight.util;

public class AlgSelectSort {
	
	/**
	 * 算法 selectSort
	 * 作    者: tangxin
	 * 日    期: 2013-1-29-上午09:50:25
	 * @param a[0,n-1]
	 * 返回类型: void 按照非降序排列的数组a[0,n-1]
	 */
	public void selectSort(int[] a){
		//切勿死记硬背找到方式方法
		
		//这个算法的排序又称冒泡排序
		//出发点:首先从数组中找到一个最小的放到第一位
		
		//如何第一次找到最小的
		for (int i = 0; i < a.length; i++) {
			//定义临时变量
			int b;
			if((i+1)<a.length&&a[i+1]<a[i]){
				b = a[i];
				a[i]=a[i+1];
				a[i+1]=b;
			}
			
			//伪代码
			//输入:{3,5,1,43,29,20};
			//输出:3,1,1,29,20,20,
			
			//得到如此结果,首先第一点没有把两个元素交换位置
			//修改:添加 a[i+1]=a[i];
			//输入:{3,5,1,43,29,20};
			//输出:3,1,5,29,20,43,
			
			//从中看以看到自己的思维方式,只是把后面小的放到前面去了
		}
	}
	
	public static void main(String[] args) {
		AlgSelectSort sort = new AlgSelectSort();
		int [] a = {3,5,1,43,29,20};
		sort.selectSort(a);
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+",");
		}
	}

}

   

 

   

package com.tang.flight.util;

import static org.junit.Assert.*;

import org.junit.Test;

public class AlgSelectSortTest {

	@Test
	public void testSelectSort3() {
		int[] a;
		a = new int[] { 3, 5, 1, 43, 29, 20 };
		//首先把最小的比较出来

		//第一个数字自己就不用和自己做比较了

		//输入:{3,5,1,43,29,20};
		for (int i = 0; i < a.length - 1; i++) {
			//如上6个数字第一个a[0]=3比较5次
			if (a[i + 1] < a[i]) {
				int b = a[i];
				a[i] = a[i + 1];
				a[i + 1] = b;
			}
		}

		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + ",");
		}
		//输入:{3,5,1,43,29,20};
		//输出:3,1,5,29,20,43,

		//从中可以看出自己又陷入了第一个方法里面了
		
		//应该是第一个数字和后面的数字都比较
		
	}
	
	@Test
	public void testSelectSort4() {
		int[] a;
		a = new int[] { 3, 5, 1, 43, 29, 20 };

		//输入:{3,5,1,43,29,20};
		//选最小的
		
		//外循环判断轮数
		for (int i = 0; i < a.length-1; i++) {
			//i数组和j数组比较 先排第一个最小的 在排第二个最小的依次
			int min = i;
			
			//内循环比较大小
			for (int j = i+1; j < a.length; j++) {
				if (a[j]<a[min]) {
					int temp = a[min];
					a[min] = a[j];
					a[j] = temp;
				}
			}
			
		}

		
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + ",");
		}
		
		
		
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值