删除数组中的重复元素

任意给定一个数组,删除其中的重复元素,首先可以对其进行排序,然后使用双指针法删除重复元素。

冒泡排序:常见的排序

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_55848732/article/details/134419738