数组排序和删除重复项

时间:2014-08-16 12:59:24

标签: c arrays sorting

我正在尝试对数组进行排序并删除重复项。这是我在c中使用的函数 这段代码是无错误的,但由于输出数组中有0,因此输错了输出。而原来没有零

sort(int tab[], int k)
{
    int temp,i,j,m; 
    for(i=0; i<k; i++){

        for(j =i+1; j<k; j++)
        {
            if(tab[i] > tab[j])
            {
                int  temp = tab[i];
                tab[i]=tab[j];
                tab[j]=temp;
            }
            else if (tab[i] == tab[j]){ 

                for (m =j; m<k; m++){
                    tab[m] = tab[m+1];
                }
            }
        }
    }
 }

这段代码中的逻辑错误是什么?我在输出中得到0

1 个答案:

答案 0 :(得分:0)

你的代码是正确的......但你忘了做k--; 因为每次大小减少1时都会删除副本..

sort(int tab[], int k)
{ 
    int temp,i,j,m;

    for( i=0;i<k;i++)
        for( j =i+1;j<k;j++)
        {
            if(tab[i]>tab[j])
            {
                int temp = tab[i];
                tab[i]=tab[j];
                tab[j]=temp;
            }
            else if (tab[i]==tab[j])
            {
                for ( m =j ; m<k;m++)
                    tab[m]=tab[m+1];

                k--;
            } //end of else if
        }// end of for
}