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;
    }
    
  • 相关阅读:
    ASP.NET MVC案例——————拦截器
    Windows Azure Virtual Network (10) 使用Azure Access Control List(ACL)设置客户端访问权限
    Windows Azure Storage (20) 使用Azure File实现共享文件夹
    Windows Azure HandBook (5) Azure混合云解决方案
    Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On
    Azure PowerShell (9) 使用PowerShell导出订阅下所有的Azure VM的Public IP和Private IP
    Windows Azure Service Bus (5) 主题(Topic) 使用VS2013开发Service Bus Topic
    Azure China (9) 在Azure China配置CDN服务
    Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
    Windows Azure HandBook (4) 分析Windows Azure如何处理Session
  • 原文地址:https://www.cnblogs.com/liuawen/p/12310613.html
Copyright © 2011-2022 走看看