-3

我是 C++ 的初学者。我输入了一个简单的代码来对整数数组进行排序,但我不知道如何处理相同的元素,例如输入 1、12、3、5、11、3 输出为1、3、3、5, 11,12但我希望输出为1,3,5,11,12。我应该在我编码的循环中进一步添加什么?

for(int i=0;i<len;i++)
{

    for(int j=i+1;j<len;j++)
    {

        if(array[i]>array[j])
        {
            swap = array[i];
            array[i] = array[j];
            array[j] = swap;
        }
    }

}
4

3 回答 3

2

您可能更容易理解此解决方案:

for(int i=0;i<len;i++)
{

    for(int j=i+1;j<len;j++)
    {

        if(array[i]>array[j])
        {
            swap = array[i];
            array[i] = array[j];
            array[j] = swap;
        }
    }
}

cout<<array[0];
for(int i=1; i<len; ++i)
{
    if(array[i] != array[i-1])
    {
        cout<<array[i];
    }
}
于 2013-09-01T12:22:19.480 回答
2

如果你真的想自己写,按照他们在评论中告诉你的去做。

如果您只想拥有一个没有重复的排序列表,请使用 std::set 并将所有数字插入其中。您将获得一个排序的、唯一的整数列表。

于 2013-09-01T12:12:46.357 回答
1

正常方式:

从您已排序的数组中删除重复项

int *start = array;
int *end = array+len;
int *res = start;

while (++start != end) {
     if (!(*res == *start)) {
          *(++res) = *start;
        }
    }

int new_len=++res -array;

否则为什么不简单地使用 STL ?

std::sort(array,array+len);
int *res=std::unique(array,array+len);
int new_len=res -array;
于 2013-09-01T12:14:03.043 回答