【发布时间】:2018-11-10 13:57:32
【问题描述】:
我编写了一个插入排序程序,但它没有正确排序输入。请帮我找出程序中的错误。
如果我的输入是1 2 3 10 -1 -2 -3,那么输出是
Value of a[0] is 1
Value of a[1] is 2
Value of a[2] is 3
Value of a[9] is -1
Value of a[10] is -2
Value of a[11] is -3
Value of a[19] is 10
我不知道我的逻辑是否正确但我不知道我哪里做错了请帮我找出程序中的错误。
#include<stdio.h>
void looper(int *);
void sort(int *,int *);
int main()
{
int a[25];
for(int i=0;i<=24;i++)
{
printf("Enter the value of a[%d] : ",i);
scanf("%d",&a[i]);
}
looper(a);
for(int i=0;i<=24;i++)
{
printf("Value of a[%d] is %d\n",i,a[i]);
}
}
void looper(int *p)
{
for(int i=1;i<=24;i++)
{
for(int j=(i-1);j>=0;j--)
{
sort((p+i),(p+j));
}
}
}
void sort(int *a,int *b)
{
int tmp;
if((*a)<(*b))
{
tmp=*a;
*a=*b;
*b=tmp;
}
}
【问题讨论】:
-
嗯.. 可能是因为我已经醒太久了,但这看起来很像未经优化的冒泡排序;不是插入排序。只是说。你的帖子应该包括你的 25 个输入数据。从中可以看出预期的结果,因此无需指定,但“它没有对输入进行正确排序”。讲述了故事的一小部分;显然它没有正确排序它们,否则你就不会在这里。它在做什么?
-
它是冒泡排序。而且
looper中的循环条件很可疑。 -
@Nelfeal 你能帮我写代码吗?你会做哪些改变?
-
实际上我误读了
sort电话;这不是真正的冒泡排序。事实上,这并不是我所知道的任何事情。我想你的意思是写sort(p+j+1, p+j)。 -
@Nelfeal 当然我理解那个参考但是对于插入排序我应该怎么做?
标签: c arrays sorting insertion-sort