我正在尝试对数组进行排序并删除重复项。这是我在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
答案 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
}