任意给定一个数组,删除其中的重复元素,首先可以对其进行排序,然后使用双指针法删除重复元素。
冒泡排序:常见的排序
int bubble_sort(int a[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
return 0;
}
双指针法排序:(来源于力扣第26题)
int removeDuplicate(int a[],int n)
{
if(n==0) return 0;
int fast=1,slow=1;
while(fast<n)
{
if(a[fast]!=a[fast-1])
{
a[slow]=a[fast];
slow++;
}
fast++;
}
return slow;
}
完整代码如下:
#include<stdio.h>
int bubble_sort(int a[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
return 0;
}
int removeDuplicate(int a[],int n)
{
if(n==0) return 0;
int fast=1,slow=1;
while(fast<n)
{
if(a[fast]!=a[fast-1])
{
a[slow]=a[fast];
slow++;
}
fast++;
}
return slow;
}
int main()
{
int b[10]={5,6,6,5,3,3,7,9,10,10};
int m=sizeof(b)/sizeof(b[0]);
int i,j;
// printf("%d\n",m);
bubble_sort(b,m);
printf("排序后的结果为:\n");
for(i=0;i<m;i++)
printf("%d ",b[i]);
m=removeDuplicate(b,m);
printf("\n--------------------------\n");
printf("删除重复元素后的结果为:\n");
for(i=0;i<m;i++)
printf("%d ",b[i]);
return 0;
}