第五天:算法

来源:互联网 发布:办公室软件2003下载 编辑:程序博客网 时间:2024/05/22 02:16
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);}}