算法通关:005对数器
就是你有优解,但是不知道对不对,或者你遇到了题,但是没有在线网站能跑,无法检查你的思路是否正确。
写一个随机生成符合输入要求的方法。
此时用暴力解法写一个,因为答案肯定是对的,再写一个优解方法。将两个答案进行对比。
经过很多轮这样的对比,就能确定优解思路正确。
public class _005 {
//对数器
public static void main(String[] args) {
//N 是数组几位数的范围
int N = 10;
int max = 500;
int testTimes = 100;//进行多少次测试
System.out.println("测试开始!!");
for (int i = 0; i < testTimes; i++) {
System.out.println("这是第" + (i+1) + "次测试");
//在这里使用N 随机产生数组多少位
int n = (int) (Math.random() * N) + 1;
int[] arr = randomArray(n, max);
int[] arr1 = copy(arr);
int[] arr2 = copy(arr);
int[] arr3 = copy(arr);
/* sout(arr);
sout(arr1);
sout(arr2);
sout(arr3);
System.out.println("~~~~~~~排序后~~~~~~~~");*/
selectSort(arr1);
popSort(arr2);
insertSort(arr3);
/* sout(arr1);
sout(arr2);
sout(arr3);*/
/* 编程习惯:在很多情况下,程序员习惯于使用!=来检查不等的情况,因为这样可以更快地发现问题并作出反应(即数组不相同的情况),
这是一种常见的编程实践。
避免错误:如果使用==,可能会在逻辑上产生误导,特别是在复杂的条件判断中,容易让人误解比较的意图。
使用!=则直接表明了比较的目的,即寻找数组中的不同之处。
*/
//此时就要注意 && 和 || 的使用
if (!sameArray(arr1, arr2) && !sameArray(arr3, arr1) ) {
System.out.println("出错了!");
}
System.out.println("测试通过!!!");
}
System.out.println("测试结束");
}
//输出数组
public static void sout(int[] arr){
for(int i : arr){
System.out.print(i);
}
System.out.println();
}
//随机产生一个数组
//利用random
public static int[] randomArray(int n, int max) {
//n 是这个数组有几个数字,max 是这个数组的最大值
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = (int) (Math.random() * max) + 1;
}
return arr;
}
//复制数组
public static int[] copy(int[] arr) {
int[] copy_arr = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
copy_arr[i] = arr[i];
}
return copy_arr;
}
//交换
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//插入排序 拿牌
public static void insertSort(int[] arr){
if(arr == null || arr.length == 1){
return;
}
for(int i = 0; i < arr.length; i++){
for(int j = i-1;j >= 0 && arr[j] > arr[j+1];j--){
swap(arr, j, j+1);
}
}
}
//选择排序
public static void selectSort(int[] arr) {
if (arr == null || arr.length == 0) {
return;
}
for (int i = 0; i < arr.length; i++) {
for (int end = arr.length - 1; end > i; end--) {
if (arr[end] < arr[i]) {
swap(arr, i, end);
}
}
}
}
//冒泡排序
public static void popSort(int[] arr) {
if(arr == null || arr.length == 1){
return;
}
for (int end = arr.length - 1; end > 0; end--) {
for (int i = 0; i < end; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
}
}
//查看两个数组是否相同
public static boolean sameArray(int[] arr1,int[] arr2){
int n = arr1.length;
for(int i = 0;i < n ;i++){
if(arr1[i] != arr2[i]){
return false;
}
}
return true;
}
/* 编程习惯:在很多情况下,程序员习惯于使用!=来检查不等的情况,因为这样可以更快地发现问题并作出反应(即数组不相同的情况),
这是一种常见的编程实践。
避免错误:如果使用==,可能会在逻辑上产生误导,特别是在复杂的条件判断中,容易让人误解比较的意图。
使用!=则直接表明了比较的目的,即寻找数组中的不同之处。
*/
}
原文地址:https://blog.csdn.net/m0_75257168/article/details/140625318
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!