yaoike 2016-12-19 16:53 采纳率: 0%
浏览 881

PtrArray 的 qsort排序为何不成功?

请教大神,我调试了一晚上都查不出问题来。

PtrArray2.h 文件

 #pragma once
#include "afxcoll.h"

typedef int (__cdecl *GENERICCOMPAREFN)(const void * elem1, const void * elem2);
typedef int (__cdecl *STRINGCOMPAREFN)(const void ** elem1, const void ** elem2);

class CPtrArray2 :
    public CPtrArray
{
public:
    CPtrArray2(void);
    ~CPtrArray2(void);

public:
    void Sort(STRINGCOMPAREFN pfnCompare = Compare);

protected:
    static int __cdecl Compare(const void ** pstr1, const void ** pstr2);

};


PtrArray2.cpp

 #include "stdafx.h"
#include "PtrArray2.h"


CPtrArray2::CPtrArray2(void)
{
}


CPtrArray2::~CPtrArray2(void)
{
}

int CPtrArray2::Compare(const void ** pstr1, const void ** pstr2)
{
    ASSERT(pstr1);
    ASSERT(pstr2);
    int n1 = (**((int **)pstr1));
    int n2 = (**((int **)pstr2));
    return n1 < n2;
    //return (**((int **)pstr1)) > (**((int **)pstr2));
}

void CPtrArray2::Sort(STRINGCOMPAREFN pfnCompare /*= CSortedStringArray::Compare */)
{
    void ** prgstr = GetData();
    int nSize = GetSize();
    qsort(prgstr, GetSize(), sizeof(void *),(GENERICCOMPAREFN)pfnCompare);
}

主程序.cpp中调用


    srand( (unsigned)time( NULL ) ); // Generate seed for rand().
    CPtrArray2 arr;
    int *ptr = NULL;
    for (int i=0; i< 10;i++)
    {       
        int n = rand();
        int *p = new int(n);
        arr.Add( p );
        TRACE("%d------->%d\n",p, *p);
    }
    TRACE("\n\n");
    long ltim=GetTickCount();
    arr.Sort();
    for (int i=0; i< 10;i++)
    {
        TRACE("%d--------->%d\n", arr[i], (*(int *)(arr[i])));
    }

    TRACE("Time took= %li\n", GetTickCount()-ltim);

结果没能正确排序,请问是什么原因呢?

  • 写回答

3条回答 默认 最新

  • dabocaiqq 2016-12-19 16:57
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。
  • ¥15 SQL Server analysis services 服务安装失败