【问题标题】:Why this C-Program for selection sort gives wrong output?为什么这个用于选择排序的 C 程序给出错误的输出?
【发布时间】:2021-06-30 06:58:40
【问题描述】:

这个选择排序程序给出了不利的输出,我尝试了很多但找不到我的错误,输出,我通过这个没有排序,一个或多个元素在错误的位置(或者它们没有排序)...请帮我找出我的错误。

#include <stdio.h>

void swap(int *p1, int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}

int *get_least(int *p, int i, int count)
{
int temp = *(p + i), key = 0;
int *index;

for (i; i < count; i++)
{

    if (temp > *(p + i))
    {
        temp = *(p + i);
        index = (p + i);
        key++;
    }
}

if (key == 0)
{
    return (p + 1);
}

return (index);
}

void sel_sort(int *p, int count)
{
for (int i = 0; i < count - 1; i++)
{
    swap((p + i), get_least(p, i, count));
}
}

int main()
{
int num[10], count;

printf("ENTER INPUT LIMIT:\n");
scanf("%d", &count);

printf("ENTER YOUR NUMBERS:\n");
for (int i = 0; i < count; i++)
{
    scanf("%d", &num[i]);
}

sel_sort(num, count);

printf("OUTPUT AFTER SORTING:\n");
for (int i = 0; i < count; i++)
{
    printf("%d ", num[i]);
}

return (0);
}

我得到这个输出:

【问题讨论】:

  • 不清楚你想用key做什么,但返回p+1几乎肯定是错误的。尝试删除key 以及与key 相关的所有代码。
  • 你好@user3386109,我实际上提供了key,以防循环没有找到比第一个元素更小的值(即temp*(p+i))然后,它只是返回地址那个元素......但不幸的是我写的是(p + 1)而不是(p + i)......但我也尝试删除与键相关的整个代码,但我得到了相同的未排序输出。
  • 您需要初始化index,例如int *index = p + i;。这样,如果没有找到更小的值,代码将返回p + i

标签: c sorting selection-sort


【解决方案1】:

正如你在cmets中提到的,你想要返回地址。现在,当您将 (p+i) 作为地址返回时,您的 i 值会发生变化,并保存来自 for 循环的最后一个递增值,因此返回的地址与您应该返回的地址不同。

【讨论】:

    猜你喜欢
    • 2023-02-05
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多