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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?