c ++ max选择排序

时间:2011-11-18 19:19:49

标签: c++ sorting syntax

我已经开始学习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;
}

4 个答案:

答案 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”。如果您需要向其他人寻求建议,这可能会有所帮助!

祝你好运!