STDMETHODIMP CSortArray::Sort(int length, VARIANT array,VARIANT *arr)
{
USES_CONVERSION;
SAFEARRAYBOUND pSab[1];
pSab[0].lLbound = 0;
pSab[0].cElements = length;
SAFEARRAY *pSa = SafeArrayCreate(VT_I2,1,pSab);
VARIANT* varArray;
if( array.vt==(VT_VARIANT|VT_BYREF))
varArray = array.pvarVal;
else
varArray = &array; int *pData;
SafeArrayAccessData(pSa, (void **)&pData);
SafeArrayCopy(*(varArray->pparray),&pSa);
long Ucolnum = 0,Lcolnum = 0;
if (pSa != NULL)
{
SafeArrayGetUBound(pSa,1,&Ucolnum);
SafeArrayGetLBound(pSa,1,&Lcolnum);
for(int i = Lcolnum,temp = 0; i < Ucolnum; i++)//这个循环是排序
{
int k = i;
for(int j = i ;j < Ucolnum; j++)
{
if (pData[k] > pData[j])
k = j;
}
temp = pData[i];pData[i] = pData[k];pData[k] = temp;
}
int a = pData[3];
SafeArrayUnaccessData(pSa);
arr->vt = VT_ARRAY | VT_VARIANT;
arr->parray = pSa;
}
return S_OK;
}为什么经过上面的排序之后数组中数据还是原来的样子呢?
那个排序算法我测试过了没有问题!返回a的值是个任意的数据。
怎么回事情?
{
USES_CONVERSION;
SAFEARRAYBOUND pSab[1];
pSab[0].lLbound = 0;
pSab[0].cElements = length;
SAFEARRAY *pSa = SafeArrayCreate(VT_I2,1,pSab);
VARIANT* varArray;
if( array.vt==(VT_VARIANT|VT_BYREF))
varArray = array.pvarVal;
else
varArray = &array; int *pData;
SafeArrayAccessData(pSa, (void **)&pData);
SafeArrayCopy(*(varArray->pparray),&pSa);
long Ucolnum = 0,Lcolnum = 0;
if (pSa != NULL)
{
SafeArrayGetUBound(pSa,1,&Ucolnum);
SafeArrayGetLBound(pSa,1,&Lcolnum);
for(int i = Lcolnum,temp = 0; i < Ucolnum; i++)//这个循环是排序
{
int k = i;
for(int j = i ;j < Ucolnum; j++)
{
if (pData[k] > pData[j])
k = j;
}
temp = pData[i];pData[i] = pData[k];pData[k] = temp;
}
int a = pData[3];
SafeArrayUnaccessData(pSa);
arr->vt = VT_ARRAY | VT_VARIANT;
arr->parray = pSa;
}
return S_OK;
}为什么经过上面的排序之后数组中数据还是原来的样子呢?
那个排序算法我测试过了没有问题!返回a的值是个任意的数据。
怎么回事情?
set sort = server.CreateObject("Sort.SortArray")
dim array(7)
for i = 0 to 6
array(i) = 7 - i
next
arr = sort.Sort(7,array)
for i = 0 to 6
response.Write arr(i)&","
next