插入排序作业

时间:2013-10-05 16:23:56

标签: c++ sorting

在输入中我必须指定数组及其元素,输出应采用下面给出的形式

输入

5
2 4 6 8 3

示例输出

2 4 6 8 8 
2 4 6 6 8 
2 4 4 6 8 
2 3 4 6 8

这是我的输出

2 4 6 8 8
 2 4 6 6 8
 2 4 4 6 8
 2 4 3 6 8
 2 3 3 6 8
 2 3 3 6 8

int main() {    

    int* a=0;
    int n,x;
    std::cout<<"Enter size ";
    std:: cin>>n;
    std::cout<<"Enter elements ";
    a=new int[n];

    for(int i=0;i<n;i++){
        std::cin>>x;
        a[i]=x;
    }

    int q=a[n-1];
    for(int i=n;i>=0;i--){
        if(a[i-2]>q)
        {   a[i-1]=a[i-2];
        }else 
            a[i]=q;

        for(int j=0;j<n;j++ )
        {   std::cout<<a[j];cout<<" ";
        }
        cout<<" \n ";
    }

    //for(int j=0;j<n;j++ ){std::cout<<a[j];}
    getch();             
}

我做错了什么?

1 个答案:

答案 0 :(得分:2)

i一直到0。然后i-2可以转到-2。因此,该行在数组开始之前进行索引,这是未定义的行为:

    if(a[i-2]>q)

在这里,你要分配数组中的值而不记住旧值是什么。

    }else 
        a[i]=q;

因此,您正在丢失信息,因此某些事情会出错,因为排序不应该破坏信息。