1.计数器概念
对数器的概念和使用
0,有一个你想要测的方法a,
1,实现一个绝对正确但是复杂度不好的方法b,
2,实现一个随机样本产生器
3,实现比对的方法
4,把方法a和方法b比对很多次来验证方法a是否正确。
5,如果有一个样本使得比对出错,打印样本分析是哪个方法出6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确。
2.代码体现
1.有一个你想要测的方法a,测试一个冒泡排序
/***
* 冒泡实现
* @param arr
*/
public static void bubbleSort(int [] arr){
if (arr.length == 0 || arr.length == 1){
return;
}
for (int i = 0; i < arr.length-1 ; i++) {
boolean flag = true;
for (int j = 0; j < arr.length-1-i ; j++) {
if (arr[j]>arr[j+1]){
swap(arr,j,j+1);
flag = false;
}
}
if (flag){
break;
}
}
}
2. 实现一个绝对正确但是复杂度不好的方法b, 调用系统的排序
/***
* 2. 实现一个绝对正确的但是复杂度不好的方法b
* 调用Arrays.sort 排序
* @param arr
*/
public static void comparator(int [] arr){
Arrays.sort(arr);
}
3.实现一个随机样本产生器
/***
* 2.实现一个随机样本产生器
* @param maxSize
* @param maxValue
*/
public static int [] generateRandomArray(int maxSize,int maxValue){
int [] arr = new int [new Random((maxSize+1)).nextInt()];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Random(maxValue+1).nextInt();
}
return arr;
}
4.实现比对的方法
/***
* 实现比对的方法
* @param arr
* @param targetArr
* @return
*/
public static boolean isEquals(int [] arr,int [] targetArr){
//for zero
if (arr.length == 0 || targetArr.length == 0){
return true;
}
// for null
if (arr == null && targetArr == null){
return true;
}
// for null other not null but other is null
if (arr == null && targetArr != null || arr != null && targetArr == null){
return false;
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] != targetArr[i]){
return false;
}
}
return true;
}
5.6步骤就是代码多Test
5.全部代码
package com.ncst.ch01;
import java.util.Arrays;
import java.util.Random;
import java.util.concurrent.ForkJoinPool;
/**
* @author i
* @create 2020/3/23 21:20
* @Description 冒泡排序
* 对数器的概念和使用
* 1、有一个你想要测的方法a
* 2、实现一个绝对正确的但是复杂度不好的方法b
* 3.实现一个随机样本产生器
*
*/
public class BubbleSort {
/***
* 冒泡实现
* @param arr
*/
public static void bubbleSort(int [] arr){
if (arr.length == 0 || arr.length == 1){
return;
}
for (int i = 0; i < arr.length-1 ; i++) {
boolean flag = true;
for (int j = 0; j < arr.length-1-i ; j++) {
if (arr[j]>arr[j+1]){
swap(arr,j,j+1);
flag = false;
}
}
if (flag){
break;
}
}
}
/***
* 交换
* @param arr
* @param i
* @param j
*/
public static void swap(int [] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
/***
* 2. 实现一个绝对正确的但是复杂度不好的方法b
* 调用Arrays.sort 排序
* @param arr
*/
public static void comparator(int [] arr){
Arrays.sort(arr);
}
/***
* 2.实现一个随机样本产生器
* @param maxSize
* @param maxValue
*/
public static int [] generateRandomArray(int maxSize,int maxValue){
int [] arr = new int [new Random((maxSize+1)).nextInt()];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Random(maxValue+1).nextInt();
}
return arr;
}
/***
* 实现比对的方法
* @param arr
* @param targetArr
* @return
*/
public static boolean isEquals(int [] arr,int [] targetArr){
//for zero
if (arr.length == 0 || targetArr.length == 0){
return true;
}
// for null
if (arr == null && targetArr == null){
return true;
}
// for null other not null but other is null
if (arr == null && targetArr != null || arr != null && targetArr == null){
return false;
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] != targetArr[i]){
return false;
}
}
return true;
}
/***
*
* @param arr
* @return
*/
public static int [] copyArray(int [] arr){
int [] newArray = new int [arr.length];
for (int i = 0; i < arr.length; i++) {
newArray[i] = arr[i];
}
return newArray;
}
public static void main(String[] args) {
int maxSize = 100000;
int maxValue = 100000;
//随机生成一个数组
int [] arr = generateRandomArray(maxSize,maxValue);
int [] arr2 = copyArray(arr);
//自己的排序
bubbleSort(arr);
//jdk的排序
comparator(arr2);
if (isEquals(arr,arr2)){
System.out.println("success!");
}else {
System.out.println("fuck!");
}
}
}