【问题标题】:Array sorting and removing duplicates数组排序和删除重复项
【发布时间】:2014-08-16 12:59:24
【问题描述】:

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

【问题讨论】:

  • 首先格式化/正确缩进这个邪恶的生物
  • 您发布的代码不会产生任何输出。请提供一个清晰的示例,说明您的输出是如何产生的、您期望的输出以及您实际看到的输出。
  • 这类问题在 Stackoverflow 上是题外话。您应该自己调试,而不仅仅是包含一个代码转储和一个简短的句子,要求其他人找到您的错误。

标签: c arrays sorting


【解决方案1】:

你的代码是正确的......但你忘了做一个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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 2012-03-10
    • 2011-02-09
    • 2021-11-12
    • 2021-01-27
    • 2014-10-15
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多