为什么这个用于选择排序的 C 程序会给出错误的输出?
Why this C-Program for selection sort gives wrong output?
这个选择排序程序给出了不利的输出,我尝试了很多但无法找到我的错误,输出,我通过这个没有排序,一个或多个元素在错误的位置(或者它们是未排序)...请帮我找出我的错误。
#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);
}
我得到这个输出:
正如您在 评论 中提到的,您想要 return 地址。现在,当您 return (p+i)
作为地址时,您的 i
值会更改并保存 for
循环中的最后一个递增值,因此 returned 地址与您应该做的不同 return.
这个选择排序程序给出了不利的输出,我尝试了很多但无法找到我的错误,输出,我通过这个没有排序,一个或多个元素在错误的位置(或者它们是未排序)...请帮我找出我的错误。
#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);
}
我得到这个输出:
正如您在 评论 中提到的,您想要 return 地址。现在,当您 return (p+i)
作为地址时,您的 i
值会更改并保存 for
循环中的最后一个递增值,因此 returned 地址与您应该做的不同 return.