答案老是不对,哪里错了呀?

题目描述
给定一个数组,输出其中第四小的整数(相等的整数只计算一次)。
输入
第一行一个正整数,4<=n<=1000.
第二行个整数,正整数的值域为[-109,109].
输出
一行一个整数。
样例输入 Copy
7
3 3 2 0 -1 -1 8
样例输出 Copy
3


#include<cstdio>
using namespace std;
int a[1000];
int main()
{
    int n,i,m;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
        for(int k=i+1;k<=n;k++){
            if(a[i]>a[k]){
                m=a[i];
                a[i]=a[k];
                a[k]=m;
            }
        }
    }
    for(i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(a[i]==a[j]){
                for(int l=j;l<=n;l++){
                    a[l]=a[l+1];
                }
                j=j-1;
                n=n-1;
            }
        }
    }
    printf("%d",a[4]);
    return 0; 
}

哪里错了啊??

你值还没输进来就开始比较交换了?

先输入,再用计数排序去重,然后排序,找到第四个就好了