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);
}
}