Math.random()与对数器

这篇文章重点是Java里的随机函数Math.random(),具体就不分析了,详细的可以百度。这个函数尤为重要,因为在检验一个算法是否正确的时候,我们只能进行有限的次数检验,仅仅靠我们有限的那几个检验,有时候不足以验证算法的正确性。

package com.harrison.java;

public class Comp {
    
    
	public static void swap(int[] arr,int i,int j) {
    
    
		int tmp=arr[j];
		arr[j]=arr[i];
		arr[i]=tmp;
	}
	public static void selectSort(int [] arr) {
    
    
		if(arr==null || arr.length<2) {
    
    
			return;
		}
		int N=arr.length;
		for(int i=0; i<N; i++) {
    
    
			int minValueIndex=i;
			for(int j=i+1; j<N; j++) {
    
    
				minValueIndex=arr[j]>=arr[minValueIndex]?j:minValueIndex;
			}
			swap(arr,i,minValueIndex);
		}
	}
	public static void insertSort(int []arr) {
    
    
		if(arr==null || arr.length<2) {
    
    
			return;
		}
		int N=arr.length; 
		for(int end=1; end<N; end++) {
    
    
			for(int pre=end-1; pre>=0 && arr[pre]>arr[pre+1]; pre--) {
    
    
				swap(arr,pre,pre+1);
			}
		}
	}
	
	//返回一个数组arr,arr长度[0,maxLen-1],arr中的每个值[0,maxValue-1]
	public static int[] lenRandomValueRandom(int maxLen,int maxValue) {
    
    
		int len=(int)(Math.random()*maxLen);
		int [] ans=new int[len];
		for(int i=0; i<len; i++) {
    
    
			ans[i]=(int)(Math.random()*maxValue);
		}
		return ans;
	}
	
	public static int[] copyArray(int []arr) {
    
    
		int []ans=new int[arr.length];
		for(int i=0; i<arr.length; i++) {
    
    
			ans[i]=arr[i];
		}
		return ans;
	}
	
	//arr1和arr2一定等长
	public static boolean isSorted(int []arr) {
    
    
		if(arr.length<2) {
    
    
			return true;
		}
		int max=arr[0];
		for(int i=1; i<arr.length; i++) {
    
    
			if(max>arr[i]) {
    
    
				return false;
			}
			max=Math.max(max, arr[i]);
		}
		return true;
	}
	
	public static void main(String[] args) {
    
    
		int maxLen=10;
		int maxValue=1000;
		int testTimes=10000;
		for(int i=0; i<testTimes; i++) {
    
    
			int []arr1=lenRandomValueRandom(maxLen,maxValue);
			int []tmp=copyArray(arr1);
			selectSort(arr1);
			if(!isSorted(arr1)) {
    
    
				for(int j=0; j<tmp.length; j++) {
    
    
					System.out.print(tmp[j]+" ");
				}
				System.out.println();
				System.out.println("选择排序错了");
				break;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44337241/article/details/119204674
今日推荐