我已经开始学习c ++了。 (我在学校学习应用数学)我必须学习编程。我刚刚在c ++中写了一个最大选择排序。它应该按递减顺序打印预定义数组的元素,但它不起作用。你能告诉我哪里出错了吗?
int* max(int *array)
{
int *max = array++;
while(*array)
{
if (*max<*array) *max = *array;
array++;
}
return max;
}
void change (int *what, int *to)
{
int *temp = what;
what =to;
to = temp;
}
void sort(int *array)
{
while(*array) change(array,max(array));
array++;
}
int _tmain(int argc, _TCHAR* argv[])
{
int A[] ={7,5,6,9,2,5,3,1,4,10,6,7,2,8};
sort (A);
int i =0;
while (A[i]) cout<<A[i++];
getchar();
return 0;
}
答案 0 :(得分:4)
我看到的第一个问题是while (*array) { ... }
不会在你想要的地方终止,因为超出数组最后一个元素的不确定是0或NULL,或者它可能在中间终止如果要对包含0的数组进行排序,则为数组。
相反,你想说的是:
int A[] = { ... };
int element_count = sizeof(a)/sizeof(a[0]);
for (int i = 0; i < element_count; ++i) { ... }
答案 1 :(得分:2)
您似乎已将指针和值的概念颠倒过来。例如,您现在的change
函数是
void change (int *what, int *to)
{
int *temp = what;
what =to;
to = temp;
}
什么时候应该
void change (int *what, int *to)
{
int temp = *what;
*what = *to;
*to = temp;
}
几乎完全相反。
在max
函数中我还可以看到几个指针的误用以及sort
函数,这是我在看到代码之后看到的内容。你需要回去学习指针,然后再试一次。
答案 2 :(得分:2)
第二个问题是array++;
函数中的sort()
不是while循环的一部分。如果永远不会退出,我不会感到惊讶。
答案 3 :(得分:0)
我会尝试使用正确的类型明确地显示您要尝试做的事情;例如:
while (*array)
{
...
}
如果它更像是,那么将更容易调试
while (array != NULL)
甚至
for (int k=0; k<n; k++)
{
// do something with array[k]
}
此外,您的change
函数似乎应该交换指针所指向的两个值,但它不会。
万一它有所帮助,我认为你所做的技术名称叫做“Selection Sort”。如果您需要向其他人寻求建议,这可能会有所帮助!
祝你好运!