现在的位置: 首页 > 综合 > 正文

第五天:算法

2018年05月16日 ⁄ 综合 ⁄ 共 2685字 ⁄ 字号 评论关闭
package day05;
/**
 * 
 * @author chen
 * @mail   gumu_2008@126.com
 * @date   2012-5-1 下午07:33:27
 * 
 * 三者交换,有一个空间换的,易于思考。
 * 			o				
 * 		o       o
 * 就是下面两个变量中,有一个先放到上面的那个做个备份 ,然后可以对其变换 ,最后把改掉的那个再
 * 给另外 一个没有改的。
 *
 */
public class SelectSortDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] ary = new int[]{5,12,6,2,8,9};
		int[] temp = sort(ary);
		int[] temp2 = sort1(ary);
		int[] temp3 = insertSort(ary);
		System.out.println("选择排序:");
		for (int i = 0; i < temp.length; i++) {
			System.out.print(temp[i]+",");
		}
		System.out.println();
		System.out.println("冒泡排序:");
		for (int i = 0; i < temp2.length; i++) {
			System.out.print(temp2[i]+",");
		}
		
		System.out.println();
		System.out.println("插入排序:");
		for (int i = 0; i < temp3.length; i++) {
			System.out.print(temp3[i]+",");
		}
	}
	
	//选择排序 
	public static int[] sort(int[] sort){
		for(int i=0;i<sort.length;i++){
			for(int j=i+1;j<sort.length;j++){
				if(sort[i]>sort[j]){
					int temp = sort[i];
					sort[i] = sort[j];
					sort[j] = temp;
				}
			}
		}
		return sort;
	}
	
	//冒泡排序:
	public static int[] sort1(int[] sort){
		for(int i=0;i<sort.length;i++){
			for(int j=0;j<sort.length-i-1;j++){
				if(sort[j]>sort[j+1]){
					int temp = sort[j+1];
					sort[j+1] = sort[j];
					sort[j] = temp;
				}
			}
		}
		return sort;
	}
	
	//插入排序
	public static int[] insertSort(int[] ary){
		for(int i=1;i<ary.length;i++){
			int temp = ary[i];
			int j;
			for(j=i-1;j>=0 && temp<ary[j];j--){
				//if(temp<ary[j]){
					ary[j+1]=ary[j];
				//}else {
					//break;//找到插入位置
				//}
			}
			//插入操作
			//此时 的j+1与 上那个j+1正好 多1.
			ary[j+1] = temp;
		}
		
		return ary;
	}
	
	
	
}

package day05;

import java.util.Arrays;
import java.util.Random;
/**
 * 
 * @author chen
 * @mail   gumu_2008@126.com
 * @date   2012-5-1 下午08:47:02
 *
 *一个序列中取几个不重复的都 可以用它。是一个非常经典的算法。
 *从一个序列中挑选不重复的几个 。
 *Arrays里面有很多很好的方法.
 */
public class DoubleBall {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 红球 :1~33取出6个
		//蓝球:1~16个取1个	
		//随机生成一个双色球号码
		
		
		
		
		System.out.println("双色球:"+create());;
	}
	
	public static  String create(){
		//创建红色球  主要是练习数组copy。
		String[] redPool = new String[33];
	//	System.out.println(redPool[3]);说明 字符串数组默认是null.
		for(int i=0;i<redPool.length;i++){
			char[] ch = {'0','0'};
			String s = Integer.toString(i+1);
			char[] num = s.toCharArray();
			System.arraycopy(num, 0, ch, 
			          ch.length-num.length, num.length);
			String ball = new String(ch);
			redPool[i] =ball;
		}
		System.out.println("红球:"+Arrays.toString(redPool));
		//创建蓝色球
		String[] blue = ("01,02,03,04,05,06,07," +
        "08,09,10,11,12,13,14,15,16").split(",");
		System.out.println("蓝球:"+Arrays.toString(blue));
		//
		boolean[] used = new boolean[redPool.length];
		
		Random random = new Random();
		
		String[] allBall = new String[7];//全部球。
		for(int i=0;i<6;i++){//取不重复的红球
			int idx;
			do{
				idx = random.nextInt(redPool.length);
			}while(used[idx]);
			used[idx] = true;//如果发现没有使用过,就标记一下。
			allBall[i] = redPool[idx];//取出一个未使用的红球
		}
		//先把99排到最后一个,然后把再把最后一个值替换掉.
		allBall[allBall.length-1] = "99";
		System.out.println("被选中的红球,未排序:"+Arrays.toString(allBall));
		Arrays.sort(allBall);
		System.out.println("被选中的红球,已排序:"+Arrays.toString(allBall));
		//取出一个蓝球
		allBall[allBall.length-1] = blue[random.nextInt(blue.length)];
		
		
		return Arrays.toString(allBall);
	}

}

抱歉!评论已关闭.