zoukankan      html  css  js  c++  java
  • 【排序基础】3、随机生成排序算法 测试用例

    随机生成算法测试用例

    简单记录-bobo老师的玩转算法系列–玩转算法 -排序基础

    硬编码
    修改一下测试用例

    要自动生成很多很多数 SortTestHelper

    随机生成算法测试用例
    代码实现
    Java的
    SortTestHelper 排序测试辅助类

    package algo;
    
    public class SortTestHelper {
    
        // SortTestHelper不允许产生任何实例
        private SortTestHelper(){}
    
        // 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR]
        public static Integer[] generateRandomArray(int n, int rangeL, int rangeR) {
    
            assert rangeL <= rangeR;
    
            Integer[] arr = new Integer[n];
    
            for (int i = 0; i < n; i++)
                // + rangeL 偏移  
                arr[i] = new Integer((int)(Math.random() * (rangeR - rangeL + 1) + rangeL));
            return arr;
        }
    
        // 打印arr数组的所有内容
        public static void printArray(Object arr[]) {
    
            for (int i = 0; i < arr.length; i++){
                System.out.print( arr[i] );
                System.out.print( ' ' );
            }
            System.out.println();
    
            return;
        }
    }
    
    

    SelectionSort

    package algo;
    
    import java.util.*;
    
    public class SelectionSort {
    
        // 我们的算法类不允许产生任何实例
        private SelectionSort(){}
    
        public static <T extends Comparable<T>> void sort(T[] arr){
    
            int n = arr.length;
            for( int i = 0 ; i < n ; i ++ ){
                // 寻找[i, n)区间里的最小值的索引
                int minIndex = i;
                for( int j = i + 1 ; j < n ; j ++ )
                    // 使用compareTo方法比较两个Comparable对象的大小
                    if( arr[j].compareTo( arr[minIndex] ) < 0 )
                        minIndex = j;
    
                swap( arr , i , minIndex);
            }
        }
    
        private static void swap(Object[] arr, int i, int j) {
            Object t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
    
        public static void main(String[] args) {
    
            // 测试排序算法辅助函数
            int N = 20000;
            N = 20 ;
            Integer[] arr = SortTestHelper.generateRandomArray(N, 0, 10000);
            SelectionSort.sort( arr );
            SortTestHelper.printArray(arr);
    
            return;
        }
    }
    
    

    Result

    D:Environmentsjdk-11.0.2injava.exe -javaagent:D:JavaideaIU-2019.2.winlibidea_rt.jar=6615:D:JavaideaIU-2019.2.winin -Dfile.encoding=UTF-8 -classpath D:IdeaProjectsimoocPlay-with-Algorithms2-Sorting-Basicoutproduction3-Selection-Sort-Generate-Test-Cases algo.SelectionSort
    178 967 980 1049 1067 1224 1330 1819 1894 2390 2422 3030 4442 4615 6922 7027 7567 7933 8998 9089 
    
    Process finished with exit code 0
    
    

    C++的

    SortTestHelper.h

    //
    // 排序测试辅助.
    //
    
    
    #ifndef INC_03_SELECTION_SORT_GENERATE_TEST_CASES_SORTTESTHELPER_H
    #define INC_03_SELECTION_SORT_GENERATE_TEST_CASES_SORTTESTHELPER_H
    
    #include <iostream>
    #include <ctime>
    #include <cassert>
    
    using namespace std;
    
    
    namespace SortTestHelper {
    
        // 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR]
        int *generateRandomArray(int n, int rangeL, int rangeR) {
    
            assert(rangeL <= rangeR);
    
            int *arr = new int[n];
    
            srand(time(NULL));
            for (int i = 0; i < n; i++)
                arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
            return arr;
        }
    
        // 打印arr数组的所有内容
        template<typename T>
        void printArray(T arr[], int n) {
    
            for (int i = 0; i < n; i++)
                cout << arr[i] << " ";
            cout << endl;
    
            return;
        }
    
    };
    #endif //INC_03_SELECTION_SORT_GENERATE_TEST_CASES_SORTTESTHELPER_H
    
    

    main.cpp

    #include <iostream>
    #include "SortTestHelper.h"
    
    using namespace std;
    
    template<typename T>
    void selectionSort(T arr[], int n){
    
        for(int i = 0 ; i < n ; i ++){
    
            int minIndex = i;
            for( int j = i + 1 ; j < n ; j ++ )
                if( arr[j] < arr[minIndex] )
                    minIndex = j;
    
            swap( arr[i] , arr[minIndex] );
        }
    }
    
    int main() {
    
        // 测试排序算法辅助函数
        int N = 10000;
        int *arr = SortTestHelper::generateRandomArray(N,0,10000);
        selectionSort(arr,N);
        SortTestHelper::printArray(arr,N);
        delete[] arr;
    
        return 0;
    }
    
  • 相关阅读:
    命令拷屏之网络工具
    PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 LeetCode 143 重排链表
    Java实现 LeetCode 143 重排链表
  • 原文地址:https://www.cnblogs.com/liuawen/p/12310613.html
Copyright © 2011-2022 走看看