为什么选择排序的C程序给出错误的输出?

为什么选择排序的C程序给出错误的输出?,c,sorting,selection-sort,C,Sorting,Selection Sort,这个用于选择排序的程序给出了不利的输出,我尝试了很多,但找不到我的错误,输出,我正在通过这是没有排序,一个或多个元素在错误的位置(或他们没有排序)…请帮助我找到我的错误 #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

这个用于选择排序的程序给出了不利的输出,我尝试了很多,但找不到我的错误,输出,我正在通过这是没有排序,一个或多个元素在错误的位置(或他们没有排序)…请帮助我找到我的错误

#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);
}
#包括
无效交换(int*p1,int*p2)
{
内部温度=*p1;
*p1=*p2;
*p2=温度;
}
int*get_最小值(int*p,int i,int count)
{
int temp=*(p+i),键=0;
int*索引;
对于(i;i*(p+i))
{
温度=*(p+i);
指数=(p+i);
key++;
}
}
如果(键==0)
{
回报率(p+1);
}
收益率(指数);
}
无效选择排序(整数*p,整数计数)
{
对于(int i=0;i
我得到这个输出:

正如您在评论中提到的,您希望返回地址。现在,当您将
(p+i)
作为地址返回时,您的
i
值会发生更改,并保留
for
循环的最后一个递增值,因此返回的地址与您应该返回的地址不同。

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