插入排序任务

时间:2015-07-14 11:44:56

标签: c++ sorting insertion-sort

我试图解决一个问题,我应该对越来越多的数字进行排序,而不是从排序数组中取出第一个k数,并消除那些重复的数字并将它们写在输出上。

这是我的代码:

#include <iostream>

using namespace std;

int main()
{
int n, k;
cin >> n >> k;
int tab[n];
for (int i = 0; i < n; i++) //taking n numbers from input
{
    cin >> tab[i];            
} 

int j, element;
for (int i = 1; i < n; i++) //i am using insertion sort
{
    j = 0;
    while (tab[j] < tab[i])
          j++;
    element = tab[i];
    for(int k = i - 1; k >= j; k--)
            tab[k + 1] = tab[k];
    tab[j] = element; 
}

for (int i = 0; i < k; i++) //writing k smallest numbers without repetitions
{
    if (tab[i] == tab[i + 1])
       continue;
    cout << tab[i] <<"\n";    
}
cin >> n;
return 0;
}

通常它可以工作并且它给出了预期的输出,但是当我上传这个问题来检查它的正确性时(我在波兰网站上发现了这个问题),它说“错误的anwser”。 我在这里看不到任何错误,也许你会看到我写的不好的东西。

1 个答案:

答案 0 :(得分:0)

我认为你误解了这个问题。 &#39;消除那些重复的数字&#39;表示您必须打印一次该数字并消除该数字的后续发生。对于前者

n = 5;
k = 3;
tab[n] = 5 1 1 1 1

此处,已排序的标签[]变为&#39; 1 1 1 1 5&#39;,然后预期的输出为&#39; 1&#39;,但您的程序什么都没有!

我希望这会有所帮助:)