使用带有指针数组的选择排序

时间:2013-10-22 10:21:36

标签: c arrays pointers selection-sort

我目前正在尝试使用选择排序对一组指针进行排序,但没有成功。我需要用指针排序一个int值数组。我已经在数组中存储了值,剩下要做的就是对这些值进行排序。

这是我的代码:

void fill_rand_ver2(int *pointer, int size)
{
int randNbr;
int *i;

for(i = pointer; i < (pointer + size); i++)
{
    randNbr = (rand()%10)+1;
    *i = randNbr;
}
}

// sort array with help of selection sort using pointer
void sort_ver2(int *pointer, int size)
{
int *i, *j, swap;

for(i = pointer; i < (pointer + size); i++)
{
    for(j = i + 1; j < (pointer + size); j++)
    {
        if(*j < *i)
        {
            swap = *i;
            *i = *j;
            *j = swap;
        }
    }
}
}

// print out both arrays using pointer
void print_values_ver2(char *string, int *pointer, int size)
{
int *i;

printf("%s", string);
printf("\n");

for(i = pointer; i < (pointer + size); i++)
{
    printf("%d,", *i);
}
printf("\n\n");
}

当我运行程序并打印数据时,输入的值不会被排序并保持在同一位置。如果有任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我相信您希望按值排序,而不是按地址排序,因此它应该是:

void sort_ver2(int *pointer, int size)
{
    int *i, *j, swap;
    int *end = NULL;

    if(size < 2 || pointer == NULL)
        return;

    end = pointer + size - 1;

    for(i = pointer; i < end; i++)
    {
        for(j = i + 1; j <= end; j++)
        {
            if(*j < *i)
            {
                swap = *i;
                *i = *j;
                *j = swap;
            }
        }
    }
}

即使您希望按地址排序, if 语句也不正确,因为 j 总是大于代码中的 i

编辑:添加结束变量以解决内部 for 循环的不正确范围的问题。归功于@WhozCraig。