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

报告相同问题?

悬赏问题

  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示