【发布时间】:2020-10-30 15:53:07
【问题描述】:
我遇到了麻烦,你能帮帮我吗?
我成功删除了重复项,然后我使用冒泡排序对其进行排序,但效率低下。
如何删除重复项然后对其进行排序?使用2个功能不能带来我想要的。
#include <stdio.h>
#include <conio.h>
int arr[100];
int n;
void RemoveDuplicate(int arr[]);
void Print(int arr[]);
int main()
{
int i;
printf("Enter n:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
RemoveDuplicate(arr);
Print(arr);
getch();
return 0;
}
void Print(int arr[])
{
int i;
for(i=0;i<n;i++)
printf("%d ",arr[i]);
}
void RemoveDuplicate(int arr[])
{
int i,j,k;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;)
{
if(arr[i]==arr[j])
{
for(k=j;k<n;k++)
{
arr[k]=arr[k+1];
}
n--;
}
else
j++;
}
}
}
【问题讨论】:
-
翻转操作。排序,然后删除重复项。让它更容易。
-
提示:通常以相反的方向进行:首先对序列进行排序,而不是删除重复项。删除未排序序列中的重复项很痛苦。
-
C 还是 C++?请选择一个。
-
您可以在排序时删除重复项。如果你进行堆排序,你可以比较从堆中弹出的项与数组的已排序部分中的前一项,如果它与前一项匹配,则丢弃新值。
-
在 C++ 中,您可以使用
std::set容器来存储唯一项