K
Kapteyn's Star
Hi all,
Can anyone identify this sort code? why is it very slow compard to
qsort()? and it can be improved?
Thanks.
int *next_ascending(int *arr, size_t narr, int val)
{
size_t ctr;
int *next= arr;
for(ctr= 0; ctr < narr; ++ctr)
if (arr[ctr] >= val && arr[ctr] < *next) next= &arr[ctr];
return next;
}
int *next_descending(int *arr, size_t narr, int val)
{
size_t ctr;
int *next= arr;
for(ctr= 0; ctr < narr; ++ctr)
if (arr[ctr] <= val && arr[ctr] > *next) next= &arr[ctr];
return next;
}
void sort(int *arr, size_t narr, char direction)
{
size_t ctr= 0;
int preva= INT_MIN, prevd= INT_MAX, *next, tmp;
switch (direction) {
case ASCENDING:
while (ctr < narr) {
next= next_ascending(&arr[ctr], narr-ctr, preva);
tmp= arr[ctr];
arr[ctr]= preva= *next;
*next= tmp;
ctr++;
}
break;
case DESCENDING:
while (ctr < narr) {
next= next_descending(&arr[ctr], narr-ctr, prevd);
tmp= arr[ctr];
arr[ctr]= prevd= *next;
*next= tmp;
ctr++;
}
}
}
Can anyone identify this sort code? why is it very slow compard to
qsort()? and it can be improved?
Thanks.
int *next_ascending(int *arr, size_t narr, int val)
{
size_t ctr;
int *next= arr;
for(ctr= 0; ctr < narr; ++ctr)
if (arr[ctr] >= val && arr[ctr] < *next) next= &arr[ctr];
return next;
}
int *next_descending(int *arr, size_t narr, int val)
{
size_t ctr;
int *next= arr;
for(ctr= 0; ctr < narr; ++ctr)
if (arr[ctr] <= val && arr[ctr] > *next) next= &arr[ctr];
return next;
}
void sort(int *arr, size_t narr, char direction)
{
size_t ctr= 0;
int preva= INT_MIN, prevd= INT_MAX, *next, tmp;
switch (direction) {
case ASCENDING:
while (ctr < narr) {
next= next_ascending(&arr[ctr], narr-ctr, preva);
tmp= arr[ctr];
arr[ctr]= preva= *next;
*next= tmp;
ctr++;
}
break;
case DESCENDING:
while (ctr < narr) {
next= next_descending(&arr[ctr], narr-ctr, prevd);
tmp= arr[ctr];
arr[ctr]= prevd= *next;
*next= tmp;
ctr++;
}
}
}