编程小程序:1.编写程序,每次程序运行,产生5组双色球号码。每组号码升序排列,至少写出三种排序方法。

import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;

public class TestOne {
	
	public static void main(String[] args) {
		int a = 5;
		while (a>0) {
			
		//从1-33随机取出6个不同的数
		Random random=new Random();
		int [] r=new int[6];
		for (int i = 0; i < r.length; i++) {
		    int temp=random.nextInt(33)+1;	
		    
		    for (int j = 0;j < r.length; j++) {
		        if(r[j] == temp){
		        	//当发现有重复时,重新随机获取一个数,而且再从r[0]开始比较是否有重复值
		        	temp=random.nextInt(33)+1;
		        	j=-1;   
		        }
		    }
		    r[i]=temp;		 
		}
		
		//1、冒泡排序通过遍历数组进行比较,将最大值依次排到对数组进行升序排列
//		for (int i = r.length-1; i > 0; i--) {
//			for (int j = 0; j < i; j++) {
//				if (r[j]>r[j+1]) {
//					swap(r, j, j+1);
//				}
//			}
//		}
		
		//2、用Arrays类对数组进行快速升序排列
		Arrays.sort(r);
		
		//3、选择排序,将第一个数作为最小值,然后循环比较强最小值依次放在左侧,得到升序排列的数组
//		for (int i = 0; i < r.length-1; i++) {
//			int min = i;
//			for (int j = i+1; j < r.length; j++) {
//				if (r[min]>r[j]) {
//					min = j;
//				}
//			}
//			if (min != i) {
//				swap(r, min, i);
//			}
//		}
		
		//4、插入排序,通过不断地插入比较,每插入一个数就将这个数及其左侧的数进行比较排序
//		for (int i = 1; i < r.length; i++) {
//			for (int j = i; j > 0; j--) {
//				if (r[j]<r[j-1]) {
//					swap(r, j, j-1);
//				}
//			}
//		}
		
		//5、堆排序,每次建立大根堆,然后依次将堆顶与堆的最后一个元素交换
//		int arrayLength=r.length;  
//        //循环建堆  
//        for(int i=0;i<arrayLength-1;i++){  
//            //建大顶堆  
//        	buildMaxHeap(r,arrayLength-1-i);  
//            //交换堆顶和最后一个元素  
//            swap(r,0,arrayLength-1-i);  
//          //  System.out.println(Arrays.toString(r)); 
//        }
			

		//输出
		System.out.print("红色球:"+Arrays.toString(r));
		
//		for (int m = 0; m < r.length; m++) {		
//			System.out.print(r[m]+ " ");
//		}
		System.out.print("  蓝色球: "+(random.nextInt(16)+1));
		a--;
		System.out.println();
		}	
	}
	
	 //对a数组从0到lastIndex(最后一个节点)建大顶堆
	 public static void buildMaxHeap(int[] a,int lastIndex){
         //从lastIndex处节点的父节点开始 
        for(int i=(lastIndex-1)/2;i>=0;i--){
            int k=i;
            while(k*2+1<=lastIndex){
                //k节点的左子节点的索引 
                int biggerIndex=2*k+1;
                //如果biggerIndex小于lastIndex,即biggerIndex+1代表的k节点的右子节点存在
                if(biggerIndex<lastIndex){  
                    if(a[biggerIndex]<a[biggerIndex+1]){  
                        //biggerIndex记录较大子节点的索引  
                        biggerIndex++;  
                    }  
                }  
                //如果k节点的值小于其较大的子节点的值  
                if(a[k]<a[biggerIndex]){  
                    swap(a,k,biggerIndex);  
                    //将biggerIndex赋予k,开始while循环的下一次循环,重新保证k节点的值大于其左右子节点的值  
                    k=biggerIndex;  
                }else{  
                    break;  
                }  
            }
        }
    }
    //交换数组中的两个元素
    private static void swap(int[] data, int i, int j) {  
        int tmp=data[i];  
        data[i]=data[j];  
        data[j]=tmp;  
    } 
}


import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.Set;

	
public class TestTwo {

	public static void main(String[] args) {
		int a = 5;
		while (a>0) {
			
		//从1-33随机取出7个不同的数
		Random random=new Random();
		
		List<Integer> list = new LinkedList<Integer>();
	//	List<Integer> aList = new LinkedList<Integer>();
		
		while (list.size()<7) {
			 int temp=random.nextInt(33)+1;		 
			   list.add(temp);	 
		
			   //对List集合进行去重,利用Set集合不允许出现重复的元素
			   Set<Integer> set = new HashSet<Integer>(list);
			   list = new LinkedList<Integer>(set);
			   
			   //对List集合进行去重,将不重复的值放入新集合中			   
//			   for (Integer integer : list) {
//				   if (!aList.contains(integer)) {
//					 aList.add(integer);
//				}
//			}		   
		}
		
		//用Collections类进行排序
		Collections.sort(list);

		//输出
		System.out.print("红色球:");
		for (Integer integer : list) {
			System.out.print(integer.toString()+" ");
		}
		System.out.print("蓝色球:");
		System.out.print(random.nextInt(16)+1);
		a--;
		System.out.println();
		}

	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值