C++数据插入后排序,最后一个数据丢失。

最后一个数据丢了,出来一个奇怪的数据。不知道什么原因。

#include<iostream>
using namespace std;
const int MAX=100;
void myinser(int a[],int x,int &n);
int main()
{
     int a[MAX],n,x,maxi;
     cin>>n;
     for(int i=0;i<n;i++)
                cin>>a[i];
     for(int j=0;j<n-1;j++)
     {
          for(int k=j+1;k<n;k++)
          {
               if(a[k]>a[j])
               {
                     maxi=a[k];
                     a[k]=a[j];
                     a[j]=maxi;
               }
          }
     }
     cin>>x;
     myinser(a,x,n);
     for(int i=0;i<n;i++)
          cout<<a[i]<<" ";
return 0;
}

void myinser(int a[],int x,int &n)
{
     for(int i=0;i<n;i++)
     {
          if(x>a[i])
              for(int j=n;j>=i;j--)
                   a[j+1]=a[j];
              a[i]=x;
             break;
      }
      n++;
}


这是输入和输出。
10 2 7 9 11 5 4 3 6 8 20
12
12 11 9 8 7 6 5 4 3 2 1875855620

从键盘输入n个整数(n<100),存放在一维数组中,将它们从大到小排序,再从键盘输入一个整数x,将该数插入到该数组中,使得插入后元素序列依然有序,输出插入后数组中的所有元素。

函数有问题,我改了一下。

for(int i=0;i<n;i++)
     {
          if(x>a[i])
          {
               for(int j=n-1;j>=i;j--)
                   a[j+1]=a[j];
               a[i]=x;
               n++;
          }
          break;
      }

但是这样,12又不在输出中,其他正常。

函数这么整就对了

int i;
    for(i=n-1;i>=0&&a[i]<x;i--)
        a[i+1]=a[i];
    a[i+1]=x;
    n++;

但是我还是不知道前一个方法哪里错了。