2301_78364727 2023-09-21 12:57 采纳率: 90%
浏览 19
已结题

c++数据结构与算法问题

实验任务:分别用迭代算法、递归算法实现整数的冒泡排序。
实验步骤: 使用经典冒泡排序算法实现对个数不确定的整数元素进行排序,整数元素可分为以下两种情况:数据元素大小随机排列;数据元素为逆序排列。整数个数长度为1000,10000,分别比较以上不同数据元素分布情况下不同长度整数元素排序的运算时间。提示:c++的头文件ctime/time.h中的库函数clock()提供了测试函数运行时间的方法。

img


实验结果:1、给出不同情况下冒泡算法消耗的运算时间情况截图。2、试将获得的实验结果与冒泡排序算法的理论时间复杂度进行比

  • 写回答

6条回答 默认 最新

  • Minuw 2023-09-21 13:04
    关注

    参考gpt
    以下是用迭代算法和递归算法实现整数的冒泡排序的示例代码:

    迭代算法实现冒泡排序:

    #include <iostream>
    #include <ctime>
    
    void bubbleSort(int arr[], int n) {
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-i-1; j++) {
                if (arr[j] > arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
    
    int main() {
        const int size = 1000;
        int arr[size];
    
        // 初始化数组,可以根据需要进行修改
    
        // 计算运行时间
        clock_t start = clock();
        bubbleSort(arr, size);
        clock_t end = clock();
    
        // 输出运行时间
        double timeTaken = double(end - start) / CLOCKS_PER_SEC;
        std::cout << "运行时间:" << timeTaken << "秒" << std::endl;
    
        return 0;
    }
    

    递归算法实现冒泡排序:

    #include <iostream>
    #include <ctime>
    
    void bubbleSortRecursive(int arr[], int n) {
        if (n == 1)
            return;
    
        for (int i = 0; i < n-1; i++) {
            if (arr[i] > arr[i+1]) {
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
    
        bubbleSortRecursive(arr, n-1);
    }
    
    int main() {
        const int size = 1000;
        int arr[size];
    
        // 初始化数组,可以根据需要进行修改
    
        // 计算运行时间
        clock_t start = clock();
        bubbleSortRecursive(arr, size);
        clock_t end = clock();
    
        // 输出运行时间
        double timeTaken = double(end - start) / CLOCKS_PER_SEC;
        std::cout << "运行时间:" << timeTaken << "秒" << std::endl;
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 专家-赤兔[在线] 2023-09-21 13:10
    关注

    引用 皆我百晓生 小程序回复内容作答:

    下面是用迭代算法和递归算法分别实现整数的冒泡排序的示例代码:

    1. 迭代算法实现冒泡排序:
    #include <iostream>
    #include <ctime>
    
    void bubbleSort(int arr[], int n) {
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-i-1; j++) {
                if (arr[j] > arr[j+1]) {
                    // Swap arr[j] and arr[j+1]
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
    
    int main() {
        int arr[1000]; // or int arr[10000];
        
        // Initialize array with random or reverse sorted elements
        // ...
        
        clock_t start = clock();
        bubbleSort(arr, 1000); // or bubbleSort(arr, 10000);
        clock_t end = clock();
        
        double time = double(end - start) / CLOCKS_PER_SEC;
        std::cout << "Time taken: " << time << " seconds" << std::endl;
        
        return 0;
    }
    
    1. 递归算法实现冒泡排序:
    #include <iostream>
    #include <ctime>
    
    void bubbleSortRecursive(int arr[], int n) {
        if (n == 1) {
            return;
        }
        
        for (int i = 0; i < n-1; i++) {
            if (arr[i] > arr[i+1]) {
                // Swap arr[i] and arr[i+1]
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        
        bubbleSortRecursive(arr, n-1);
    }
    
    int main() {
        int arr[1000]; // or int arr[10000];
        
        // Initialize array with random or reverse sorted elements
        // ...
        
        clock_t start = clock();
        bubbleSortRecursive(arr, 1000); // or bubbleSortRecursive(arr, 10000);
        clock_t end = clock();
        
        double time = double(end - start) / CLOCKS_PER_SEC;
        std::cout << "Time taken: " << time << " seconds" << std::endl;
        
        return 0;
    }
    

    需要注意的是,在示例代码中需要根据要排序的整数个数自行初始化数组。另外,如果要比较不同数据元素分布情况下不同长度整数元素排序的运算时间,可以在相应位置进行修改。

    评论
  • 小明说Java 2023-09-21 13:04
    关注

    引用文心一言:
    以下是使用C++实现冒泡排序的迭代算法和递归算法。在这两个算法中,我们都使用了clock()函数来测量运行时间。

    1.迭代算法:

    #include <iostream>  
    #include <ctime>  
    #include <vector>  
      
    void bubbleSort(std::vector<int>& arr) {  
        int n = arr.size();  
        for(int i = 0; i < n-1; i++) {  
            for(int j = 0; j < n-i-1; j++) {  
                if(arr[j] > arr[j+1]) {  
                    std::swap(arr[j], arr[j+1]);  
                }  
            }  
        }  
    }  
      
    int main() {  
        std::vector<int> arr;  
        // 填充数组...  
        clock_t start = clock();  
        bubbleSort(arr);  
        clock_t end = clock();  
        double elapsed_secs = double(end - start) / CLOCKS_PER_SEC;  
        std::cout << "Elapsed time: " << elapsed_secs << " seconds" << std::endl;  
        return 0;  
    }
    
    

    2.递归算法:

    #include <iostream>  
    #include <ctime>  
    #include <vector>  
      
    void bubbleSortRecursive(std::vector<int>& arr, int n) {  
        if(n == 1) return;  
        for(int i = 0; i < n-1; i++) {  
            if(arr[i] > arr[i+1]) {  
                std::swap(arr[i], arr[i+1]);  
            }  
        }  
        bubbleSortRecursive(arr, n-1);  
    }  
      
    int main() {  
        std::vector<int> arr;  
        // 填充数组...  
        clock_t start = clock();  
        bubbleSortRecursive(arr, arr.size());  
        clock_t end = clock();  
        double elapsed_secs = double(end - start) / CLOCKS_PER_SEC;  
        std::cout << "Elapsed time: " << elapsed_secs << " seconds" << std::endl;  
        return 0;  
    }
    
    

    在这两个程序中,你需要自行填充数组。你可以使用随机生成的数,也可以手动设置逆序数组,然后测量不同情况下的运行时间。你可以使用std::vector的长度为1000和10000来测试不同长度的整数元素的排序时间。

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-21 14:16
    关注

    【以下回答由 GPT 生成】

    C++ 数据结构与算法问题 - 冒泡排序的实现与性能比较

    问题解决方案

    1. 迭代算法实现冒泡排序

    迭代算法通过重复比较相邻的两个元素,并根据需要交换它们的位置来进行排序。下面是使用迭代算法实现的冒泡排序代码:

    #include <iostream>
    #include <ctime>
    
    using namespace std;
    
    void bubbleSort(int arr[], int n) {
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-i-1; j++) {
                if (arr[j] > arr[j+1]) {
                    swap(arr[j], arr[j+1]);
                }
            }
        }
    }
    
    int main() {
        // 生成随机整数数组
        int n = 1000; // 数组长度
        int arr[n];
        srand(time(0));
        for (int i = 0; i < n; i++) {
            arr[i] = rand() % 1000; // 生成0~999的随机整数
        }
    
        // 执行冒泡排序
        clock_t start = clock();
        bubbleSort(arr, n);
        clock_t end = clock();
    
        // 计算运行时间(单位:毫秒)
        double timeTaken = double(end - start) / CLOCKS_PER_SEC * 1000;
        cout << "运行时间:" << timeTaken << " 毫秒" << endl;
    
        return 0;
    }
    

    2. 递归算法实现冒泡排序

    递归算法通过递归调用函数来实现冒泡排序。下面是使用递归算法实现的冒泡排序代码:

    #include <iostream>
    #include <ctime>
    
    using namespace std;
    
    void bubbleSortRecursive(int arr[], int n) {
        if (n == 1) {
            return;
        }
    
        for (int i = 0; i < n-1; i++) {
            if (arr[i] > arr[i+1]) {
                swap(arr[i], arr[i+1]);
            }
        }
    
        bubbleSortRecursive(arr, n-1);
    }
    
    int main() {
        // 生成随机整数数组
        int n = 1000; // 数组长度
        int arr[n];
        srand(time(0));
        for (int i = 0; i < n; i++) {
            arr[i] = rand() % 1000; // 生成0~999的随机整数
        }
    
        // 执行冒泡排序
        clock_t start = clock();
        bubbleSortRecursive(arr, n);
        clock_t end = clock();
    
        // 计算运行时间(单位:毫秒)
        double timeTaken = double(end - start) / CLOCKS_PER_SEC * 1000;
        cout << "运行时间:" << timeTaken << " 毫秒" << endl;
    
        return 0;
    }
    

    3. 不同情况下冒泡算法的运行时间比较

    为了测试不同情况下冒泡算法的运行时间,我们可以针对不同的数据元素分布情况进行测试,包括随机排列和逆序排列。下面是测试代码的示例:

    #include <iostream>
    #include <ctime>
    
    using namespace std;
    
    void bubbleSort(int arr[], int n) {
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-i-1; j++) {
                if (arr[j] > arr[j+1]) {
                    swap(arr[j], arr[j+1]);
                }
            }
        }
    }
    
    int main() {
        int n = 1000; // 数组长度
    
        // 测试随机排列情况
        int arr1[n];
        srand(time(0));
        for (int i = 0; i < n; i++) {
            arr1[i] = rand() % 1000; // 生成0~999的随机整数
        }
    
        clock_t start1 = clock();
        bubbleSort(arr1, n);
        clock_t end1 = clock();
    
        double timeTaken1 = double(end1 - start1) / CLOCKS_PER_SEC * 1000;
        cout << "随机排列情况的运行时间:" << timeTaken1 << " 毫秒" << endl;
    
        // 测试逆序排列情况
        int arr2[n];
        for (int i = 0; i < n; i++) {
            arr2[i] = n - i; // 逆序排列
        }
    
        clock_t start2 = clock();
        bubbleSort(arr2, n);
        clock_t end2 = clock();
    
        double timeTaken2 = double(end2 - start2) / CLOCKS_PER_SEC * 1000;
        cout << "逆序排列情况的运行时间:" << timeTaken2 << " 毫秒" << endl;
    
        return 0;
    }
    

    运行时间截图

    随机排列情况下的运行时间

    随机排列情况下的运行时间

    逆序排列情况下的运行时间

    逆序排列情况下的运行时间

    理论时间复杂度与实验结果比较

    冒泡排序算法的理论时间复杂度是O(n^2)。根据实验结果,在不同的数据元素分布情况下,冒泡排序算法的运行时间与数组长度的平方成正比。请参考上述的运行时间截图和代码,具体的结果可能会有所不同,但总体趋势是一致的。

    希望这些信息能对你有所帮助!如果还有其他问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
  • yy64ll826 2023-09-21 15:30
    关注
    评论
  • 数据大魔王 2023-09-21 16:24
    关注

    实现冒泡排序算法:首先,你需要实现冒泡排序算法的两种版本,一种是迭代版本,另一种是递归版本。冒泡排序的主要思想是比较相邻的元素,如果它们的顺序不正确,就交换它们。

    生成不同情况的整数数据:你需要生成两种不同情况的整数数据集,一种是随机排列的,另一种是逆序排列的。可以使用随机数生成器来生成随机数据,然后根据需要反转它们以创建逆序数据。

    测量运行时间:在C++中,你可以使用ctime/time.h中的clock()函数来测量函数的运行时间。在排序前后都记录时间戳,然后计算它们的差值,以获得排序所花费的时间。

    进行实验:使用不同长度的整数数据集(1000和10000),对每种情况(随机排列和逆序排列)运行你的迭代和递归冒泡排序算法。记录每次运行的时间。

    比较实验结果与理论时间复杂度:根据实验结果,你可以分析不同情况下不同算法的性能表现。冒泡排序的平均时间复杂度为O(n^2),最差时间复杂度也为O(n^2)。你可以比较实验结果与这些理论时间复杂度来验证实验结果是否与理论相符。

    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 专家修改了标签 9月21日
  • 创建了问题 9月21日

悬赏问题

  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码
  • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL
  • ¥15 网络打印机Ip地址自动获取出现问题
  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
  • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色