【发布时间】:2013-10-31 03:52:00
【问题描述】:
我目前正在尝试使用选择排序对指针数组进行排序,但没有成功。我需要只用指针对一个 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");
}
当我运行程序并打印数据时,输入的值没有排序并保持在同一位置。如有任何帮助,我将不胜感激。
【问题讨论】:
-
嗯,我相信你是想按值排序,而不是按地址排序,所以应该是 if(*j
-
@KBart 将其作为答案发布,您有我的赞成票。请注意 OP,什么都不做的原因很简单:
j总是大于i)。(j < i+size)在内部 for 条件中也不正确。如果pointer序列确实只有size元素宽,它将发送j超出范围并进入未定义的行为。 -
@WhozCraig 是的,谢谢,我将编辑我的答案以注意不正确的范围。
标签: c arrays pointers selection-sort