Just a quick snippet for sorting container and Array object.
//Method to sort container
static container sortContainer(container _con)
{
    anytype     temp1;
    anytype     temp2;
    int         i;
    int         j;
    container   sortedCon;
    ;
    sortedCon = _con;
    // Sort the container
    for (i = 1; i <= conlen(sortedCon); i++)
    {
        for (j = i + 1; j <= conlen(sortedCon); j++)
        {
            temp1 = conpeek(sortedCon, j);
            temp2 = conpeek(sortedCon, i);
            if (temp1 < temp2)
            {
                sortedCon = condel(sortedCon, j, 1);
                sortedCon = conins(sortedCon, j, temp2);
                sortedCon = condel(sortedCon, i, 1);
                sortedCon = conins(sortedCon, i, temp1);
            }
        }
    }
    return sortedCon;
}
//Method to sort Array
static Array sortArray(Array _array)
{
    int         i;
    int         arrayCount = _array.lastIndex();
    container   con, sortedCon;
    //Switch from Array to container
    for(i = 1; i <= arrayCount; i++)
    {
        con = conIns(con, i, _array.value(i));
    }
    
    //Sort the container
    sortedCon = sortContainer(con);
    
    //Switch from container to Array
    for(i = 1; i <= conLen(sortedCon); i++)
    {
        _array.value(i, conPeek(sortedCon, i));
    }
    
    return _array;
}
 
found quick sort here: https://gatesasbait.wordpress.com/2007/12/15/quicksort-on-a-container/
ReplyDeleteand modify to soft two-values-container (like [["A",5],["B", 8],["C", 1],["D",6]] ), by second value:
public static container quickSort2Val(
container _qsc,
int _qsstart = 1,
int _qsend = conlen(_qsc))
{
int qsi = _qsstart;
int qsj = _qsend;
int qsx;str qsV;
int qsKey;
str qsVal;
;
[qsV,qsx] = conpeek(_qsc, (_qsstart +_qsend)/2);
do
{
[qsVal,qsKey] = conpeek(_qsc, qsi);
while (qsKey < qsx)
{
qsi++;
if (qsi <= conlen(_qsc))
{
[qsVal,qsKey] = conpeek(_qsc, qsi);
}
else
{
break;
}
}
[qsVal, qsKey] = conpeek(_qsc, qsj);
while (qsKey > qsx)
{
qsj--;
if (qsi > 0)
{
[qsVal, qsKey] = conpeek(_qsc, qsj);
}
else
{
break;
}
}
if (qsi <= qsj)
{
[qsVal, qsKey] = conpeek(_qsc, qsi);
_qsc = conpoke(_qsc, qsi, conpeek(_qsc, qsj));
_qsc = conpoke(_qsc, qsj, [qsVal, qsKey]);
qsi++;
qsj--;
}
}
while (qsi <= qsj);
if (_qsstart < qsj)
{
_qsc = quickSort2Val(_qsc, _qsstart, qsj);
}
if (qsi < _qsend)
{
_qsc = quickSort2Val(_qsc, qsi, _qsend);
}
return _qsc;
}
Thanks for sharing such a good post.
ReplyDeleteWhenever you have issues with your dynamics software, you can always give anegis consulting a call, or find any other dynamics partner. I'm sure they will sort out all your problems.