插入排序给出奇怪的输出

时间:2018-11-10 13:57:33

标签: c arrays sorting insertion-sort

我写了一个插入排序程序,但是它不能正确地对输入进行排序。请帮助我在程序中找到错误。 如果我的输入为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;
    }
}

1 个答案:

答案 0 :(得分:0)

您目前的方法……对于任何种类的方法都不太正确。插入排序将采用一个元素并将其插入正确的索引,然后适当地向下移动已插入的项目。

void looper(int *p)
{
    for (int i = 1;i < 25;i++)
    {
        int key = p[i];
        int j = i - 1;
        while (j >= 0 && p[j] > key)
        {
            p[j + 1] = p[j];
            j = j - 1;
        }
        p[j + 1] = key;
    }
}