c语言如何进行去重加排序?

#include <stdio.h>
void cutnumber(int k[],int q){
    int i,j;
    for (i=0; i<q-1; i++) {        //去重
        for (j=i+1; j<q; j++) {
            if (k[j]==k[i]) {
                k[j]=-1;
            }
        }
    }
}
void insort(int k[],int n){       //排序
    int i,j;
    int temp;
    for (i=1; i<n; i++) {
        temp=k[i];
        for (j=i-1; j>=0&&temp<k[j]; j--) {
            k[j+1]=k[j];
        }
        k[j+1]=temp;
    }
}

int main()
{
    int a[]={1,4,5,3,3,6,7,7,0,9,1,4};
    insort(a, 12);
    cutnumber(a, 12);
    for (int i=0; i<12; i++) {
        if (a[i]>=0) {
            printf("%d ",a[i]);
        }
    }
}


对与一系列>=0的整数,能这么写吗?

可以这么写,但是没有必要,你这个去重复单独做了2重循环。实际上去重和排序可以一次搞定

int insort(int k[],int n){
    int q = n;
    for (int i = 0; i < q; i++)
    {
        int m = i;
        for (int j = m + 1; j < q; j++)
        {
            if (k[m] > k[j]) 
            {
                m = j;
            }
            else
            {
                if (k[m] == k[j])
                {
                    int t = k[q - 1];
                    k[q - 1] = k[j];
                    k[j] = t;
                    q--;
                    j--;
                }
            }
        }
        if (m != i)
        {
            int t = k[m];
            k[m] = k[i];
            k[i] = t;
        }
    }
    return q;
}

int main()
{
    int a[]={1,4,5,3,3,6,7,7,0,9,1,4};
    int q = insort(a, 12);
    for (int i=0; i<q; i++) {
        printf("%d ",a[i]);
    }
}

如果问题得到解决,请点我回答左上角的采纳和向上的箭头,谢谢