c++基础-新人求助!记录程序时间出错

问题描述

新人求助!记录程序时间出错

#include
#include
#include
#include"sort.h"
using namespace std;
int main()
{
int choice, n, i, j;
DWORD start, end;
while(1)
{
cout << "输入数据的方式:" << endl;
cout << "1、手动输入" << endl;
cout << "2、系统自动产生" << endl;
cout << "输入方式序号:" << endl;
cin >> choice;

    if (choice == 1)
    {
        cout << "排序的元素个数:" << endl;
        cin >> n;
        int *a = new int[n];
        int *b = new int[n];
        int *temp = new int[n];
        cout << "要排序的元素:" << endl;

        for (i = 0; i < n; i++)
        {
            cin >> a[i];
            b[i] = a[i];
        }

        cout << "快排结果:" << endl;
        Quicksort(a, 0, n - 1);

        for (i = 0; i < n; i++)
            cout << a[i] << " ";

        cout << endl;
        cout << "归并结果:" << endl;
        Mergesort(b, 0, n - 1);

        for (i = 0; i < n; i++)
            cout << b[i] << " ";

        cout << endl;
    }

    else if (choice == 2)
    {
        cout << "下面将随机产生10组数据:" << endl;
        for (i = 1; i <= 10; i++)
        {
            cout << "#" << i << endl;
            int *a = new int[10000 * i];
            int *b = new int[10000 * i];
            int *temp = new int[10000 * i ];

            for (j = 0; j < 10000 * i; j++)
            {
                a[j] = rand() % 100000;
                b[j] = a[j];
            }

            start = GetTickCount();
            Quicksort(a, 0, 10000 * i - 1);
            end = GetTickCount();
            cout << "快速排时间:" << end - start << "ms" << endl;
            start = GetTickCount();
            Mergesort(b, 0, 10000 * i - 1);
            end = GetTickCount();
            cout << "归并排时间:" << end - start << "ms" << endl;
        }
    }
    else
        break;
}
system("pause");
return 0;

程序中choice==1是用来测试两个排序算法有没有正确排序的,经测没问题,可是到随机生成后就有问题了,输出的时间很不对劲...

另外,别人的程序在自己电脑上没问题,到我的电脑就出现同样问题了!!!!!

图片补在下面

解决方案

解决方案二:

解决方案三:

计算机的时间精度也就是几十ms级别。你的数据量太小了。把数据扩大100倍。

解决方案四:

你申请了内存之后要释放的啊,你这样每申请一次都会有内存泄露,不应该是关掉重启出错,理论上运行时间久点,最后a,b会没有内存申请返回NULL,时间就不可预知了,所以排序时间会变得混乱,你在 for (i = 1; i <= 10; i++)这个循环的末尾加上delete []a; delete[]b;如下:
for (i = 1; i <= 10; i++)
{

cout << "#" << i << endl;
int *a = new int[10000 * i];
int *b = new int[10000 * i];
int *temp = new int[10000 * i ];

        for (j = 0; j < 10000 * i; j++)
        {
            a[j] = rand() % 100000;
            b[j] = a[j];
        }

        start = GetTickCount();
        Quicksort(a, 0, 10000 * i - 1);
        end = GetTickCount();
        cout << "快速排时间:" << end - start << "ms" << endl;
        start = GetTickCount();
        Mergesort(b, 0, 10000 * i - 1);
        end = GetTickCount();
        cout << "归并排时间:" << end - start << "ms" << endl;
                    delete []a;
                    delete []b;
    }
时间: 2024-11-01 01:39:56

c++基础-新人求助!记录程序时间出错的相关文章

c语言-俄罗斯方块C语言 12列改为10列后出错,新人求助!

问题描述 俄罗斯方块C语言 12列改为10列后出错,新人求助! #include #include #include #include #include #include #ifdef _MSC_VER // M$的编译器要给予特殊照顾 #if _MSC_VER <= 1200 // VC6及以下版本 #error 你是不是还在用VC6?! #else // VC6以上版本 #if _MSC_VER >= 1600 // 据说VC10及以上版本有stdint.h了 #include #else

新人求助 关于JAVA的基础问题

问题描述 新人求助 关于JAVA的基础问题 刚开始学习JAVA 想请教一下这里面的!X表示的是什么?是X=false吗? 解决方案 这里的!x是判断的意思而if里的布尔值只有为true的时候才会执行其后面花括号里的程序.所以当x的布尔值为true时!x是false后面花括号里的代码是不会执行的.当x的布尔值为false时!x是true这时后面花括号里的代码才会执行的. 解决方案二: 是的,非操作,就是如果x的值为false,那么非就是true,就会进入条件分支了. 解决方案三: 如果x为fals

侦听-C#记录程序运行各时间点上的值

问题描述 C#记录程序运行各时间点上的值 各位大神朋友前辈们,因实验的需要,需要记录一个算法运行过程中各时间段的计算结果,例如每隔一秒记录其运行结果.打算用C#实现,我使用Timer和多线程都无法实现,现请教各位大神,怎么做?使用什么工具?使用什么技术?有没有什么参考?多谢! 解决方案 C++记录程序运行时间C++ 记录程序运行时间C#记录程序运行时间记录显示 解决方案二: 你把这个算法的结果,每次都添加到list中,你后台可一个线程,不停地读取list就行了 解决方案三: 怎么都没多少人回答?

关于java问题-新人求助,,,毫无基础,自学JAVA

问题描述 新人求助,,,毫无基础,自学JAVA 请问这个代码应该怎么填...... 解决方案 首先说一下插入排序的思想:从第二个数开始,跟它前面的数值进行比较,直到找到比它小的数值然后插入到该数值的后面,同时把比该数值大的数值后移一位. 代码1: n[0]=n[i]; //用n[0]保存要插入的数值 代码2: j>0&&n[0]<n[j] 代码3: n[j+1]=n[j];//从原来的位置后移一位 代码4; n[j+1] 你试一下 应该可以运行 ,有问题了告诉我哈. 解决方案二

计算机问题-无法启动程序,新人求助呀

问题描述 无法启动程序,新人求助呀 无法启动程序,计算机中丢失swscale-2.dll是怎么回事

mysql-Java入门新人求助:Js中表格如何实现保存删除这两个功能?请举例说明

问题描述 Java入门新人求助:Js中表格如何实现保存删除这两个功能?请举例说明 做了一个网页,具有登录功能,其中welcome.jsp为登陆成功后的页面,那么问题来了,我新建了一个表格,如何让这个表格可以进行保存删除这两种操作?请举例说明,谢谢. 解决方案 JS:function del(r) { var i = r.parentNode.parentNode.rowIndex; alert(r.parentNode.parentNode.rowIndex); document.getElem

IIS日志分析搜索引擎爬虫记录程序

使用注意: 修改iis.php文件中iis日志的绝对路径 例如:$folder="c:/windows/system32/logfiles/站点日志目录/"; //后面记得一定要带斜杠(/). ( 用虚拟空间的不懂查看你的站点绝对路径?上传个探针查看! 直接查看法:http://站点域名/iis.php 本地查看法:把日志下载到本地 http://127.0.0.1/iis.php ) 注意: //站点日志目录,注意该目录必须要有站点用户读取权限! //如果把日志下载到本地请修改143

网站二级域名设置-新人求助:关于网站新增二级域名的问题

问题描述 新人求助:关于网站新增二级域名的问题 最近网站需要增加二级域名网站,我在网万后台新增了二级域名,记录类型选的是CNAME,记录值选的是网站域名,并且也做过域名绑定了,但是打开这个新增的二级域名的时候显示的是网站首页,这是为什么呢? 还有新增二级域名设置好了,是不是要在网站根目录下新建个文件夹存放网站程序呢?还是直接放在网站根目录下呢?求解,谢谢. 解决方案 第一种情况,你的二级域名网站与一级域名的网站不在同一个WEB服务器,那么你新建的二级域名要指向另外一个ip地址. 第二种情况,你用

新人求助,c语言问题。

问题描述 新人求助,c语言问题. 程序的功能是输入字符串存入pS指针,进行大小对比后按从小到大输出.发现当输入字符串超过5个时程序会停止运行,恳请哪位大神帮我看下代码有什么问题. 代码如下: #include #include #include #define BUF_LEN 100 #define COUNT 5 int main(void) { char buf[BUF_LEN]; size_t str_count=0; size_t capacity=COUNT; char pS=(cha