package e;
/**
* @author 真他喵的学不动咯
* @create 2022-08-07--17:22
*/
public class Logarithmicdetector {//对数器调bug,随意控制样本大小
public static void main(String[] args) {
int maxLen = 5;
int maxValue = 1000;
int tesTime = 10000;
for (int i = 0; i < tesTime; i++) {
//以下为大样本随机
int[] arr1 = lenRandomVauleRandom(maxLen, maxValue);//arr数组,长度随机,值也随机
int[] temp = copyarr(arr1);//备份arr1
int[] arr2 = copyarr(arr1);
selectionSort(arr1); //用插入排序排arr1
insertionSort(arr2); //用插入排序排arr2
if (!isSorted(arr1)) {
for (int j = 0; j < temp.length; j++) {
System.out.println(temp[j]);//打印备份的例子,方便对比原版找到错误
}
System.out.println("选择排序错了");
}
}
}
//返回一个数组arr,arr长度为【0,maxLen-1】,arr中每个值【0,maxVaule-1】
public static int[] lenRandomVauleRandom(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;
}
//copy一个数组
public static int[] copyarr(int[] arr) {
int[] ans = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
ans[i] = arr[i];
}
return ans;
}
//验证该数组是否排过序
public static boolean isSorted(int[] arr) {
if (arr.length < 2) { //如果数组长度<2,则直接return true;
return true;
}
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (max > arr[i]) { //如果最左边的值大于右边的值,则肯定是无序的
return false;
}
max = Math.max(max, arr[i]);//然后把arr[i]赋给最大值
}
return true;
}
//选择排序
public static void selectionSort(int[] arr) {
//先写边界条件
if (arr==null||arr.length<1/2){
return;
}
//写普通情况
/* 第一层循环
0~N-1
1~N-1
2~N-1
*/
int N=arr.length;
for (int i=0;i<N;i++){
//第二层循环
int minIndex=i;//设最左侧索引是最小值的索引
for (int j=i+1;j<N;j++){
minIndex=arr[j]<arr[minIndex]? j:minIndex; //如果arr[j]更小,那就返回arr[j]作为最小值
//交换指针,找到最小指针后,再交换值
}
//交换
swap(arr,i,minIndex);
}
}
//插入排序
public static void insertionSort(int[] arr){
//先写边界条件
if (arr==null||arr.length<1/2){
return;
}
//写普通情况
/*
//先写第一层循环
0~1
0~2
0~3
0~end
0~N-1
*/
int N=arr.length;
for (int end=1;end<N;end++){
//写第二层循环
/*
end是新来的数,0~end-1是已经有序的,从右往左
0~end-1 end
0~pre end
*/ //pre是个索引
for (int pre=end-1;pre>=0&&arr[pre]>arr[pre+1];pre--){ //所有有关end,都用pre表示.
swap(arr,pre,pre+1);
}
}
}
//swap函数
public static void swap(int[] arr,int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
//对数器调bug,随意控制样本大小
最新推荐文章于 2024-07-24 19:27:00 发布