使用对数器验证自己写的排序算法是否正确

需求说明

在有一些非OJ(带online judge功能)算法练习平台中,往往需要自己创建对数器,去验证自己写的排序算法是否正确?

我们可以自己去运用jdk提供给我们的工具类中的排序算法,这个算法是绝对正确的,那么我们可以使用random函数创建一个随机长度的随机数组arr1,并且复制到另一个数组arr2中,这样再分别使用系统提供的排序方法和自己写的排序算法给arr1和arr2排序,最后再使用compare方法,比较排序后的两个数组的所有元素值是否相同,如果其中有一个不同,则说明我们自己写的算法是有问题的

代码

package basic;
import java.util.Arrays;

public class Tester_oj {
    public static void main(String []args) {
       int count = 500;
       int maxSize = 100, maxValue = 100;
       boolean success = true;

       for (int i = 0; i < count; i++)
       {
           int arr1[] = generateRandomArray(maxSize, maxValue);
           int arr2[] = copyArray(arr1);
           Insertion_sort.insertion_sort3(arr1);
           comparator(arr2);
           if(!isEquals(arr1, arr2))
           {
               success =false;
               break;
           }
       }
        System.out.println(success);
    }
    public static boolean isEquals(int arr1[], int arr2[])
    {
        for (int i = 0; i < arr2.length; i++)
        {
            if (arr1[i] != arr2[i]) return false;
        }
        return true;
    }

    public static void comparator(int arr[])
    {
        Arrays.sort(arr);
    }
    public static int[] copyArray( int[] arr)
    {

        if ( arr == null)
        {
            return null;
        }
        int[ ] res = new int[arr.length];
        for (int i = 0; i < arr.length; i++)
        {
            res[i] = arr[i];
        }
        return res;
    }



    public static int[] generateRandomArray(int maxSize, int maxValue)
    {
        // maxSize表示长度,maxSize >= 0, 但是等于0时,会报错
        int arr[] = new int[(int)((maxSize + 1) * Math.random())];
        for (int j = 0; j < arr.length; j++)
        {
            // 下面这行代码能产生负数,这样能增加生成数据元素的随机性
            arr[j] =  (int)((maxValue + 1) * Math.random()) - (int)((maxValue + 1) * Math.random()) ;
        }
        return arr;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Go语言一个冒泡排序算法的代码如下所示:package mainimport "fmt"func bubbleSort(arr []int) { n := len(arr) for i := 0; i < n; i++ { for j := 0; j < n-i-1; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } }func main() { arr := []int{2, 3, 1, 4, 5} fmt.Println("Before sorting:", arr) bubbleSort(arr) fmt.Println("After sorting:", arr) } ### 回答2: 冒泡排序是一种简单的排序算法,可以使用Go语言来实现。下面是用Go语言的冒泡排序算法: ```go package main import "fmt" func bubbleSort(arr []int) { n := len(arr) for i := 0; i < n-1; i++ { for j := 0; j < n-i-1; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } } func main() { arr := []int{6, 2, 4, 1, 5, 3} fmt.Println("排序前:", arr) bubbleSort(arr) fmt.Println("排序后:", arr) } ``` 在这段代码中,我们定义了一个名为`bubbleSort`的函数来实现冒泡排序。该函数接受一个整数数组作为输入,并对数组中的元素进行排序。排序过程利用了两个嵌套的循环。外层循环从数组的第一个元素到倒数第二个元素进行迭代,内层循环从第一个元素开始与其相邻的元素进行比较,如果前一个元素大于后一个元素,则交换它们的位置。通过多次迭代,数组中的最大元素会逐渐移到末尾,最终实现了冒泡排序。 在`main`函数中,我们定义了一个整数数组并赋予初始值,然后调用`bubbleSort`函数来对数组进行排序。最后我们打印排序前和排序后的数组,以验证算法正确性。 以上代码是一个简单的冒泡排序的实现,能够对给定的整数数组进行排序。当然,这只是冒泡排序的一种实现方式,也可以根据具体的需求进行优化或改进。 ### 回答3: 冒泡排序是一种简单的排序算法,它通过多次遍历列表,比较相邻的元素并交换它们的位置,使得较大的元素逐渐“冒泡”到列表的末尾,较小的元素逐渐“浮”到列表的前端,从而实现排序。 下面是使用Go语言编的冒泡排序算法: ```Go package main import "fmt" func bubbleSort(arr []int) { n := len(arr) for i := 0; i < n-1; i++ { for j := 0; j < n-i-1; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } } func main() { arr := []int{64, 34, 25, 12, 22, 11, 90} bubbleSort(arr) fmt.Println("排序后的数组:", arr) } ``` 在上述代码中,我们首先定义了一个`bubbleSort`函数,它接受一个整数切片作为参数。算法的主要逻辑实现在两个嵌套的for循环中,通过比较相邻元素的大小并进行交换,将较大的元素向右移动。 然后,在`main`函数中,我们定义了一个整数切片`arr`,并调用`bubbleSort`函数对其进行排序。最后,我们打印排序后的数组。 当我们运行上述代码时,输出结果为:[11 12 22 25 34 64 90],即已经成功将切片`arr`中的元素按从小到大的顺序进行排序。 这就是使用Go语言编冒泡排序算法的方法。冒泡排序算法虽然简单,但对于小规模的数据排序仍然是一种有效的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值