原题为:对一个有序数组删除重复的元素并计算新数组的长度并打印新数组
个人加之为:对非有序数组排序以及删除重复的元素并计算新数组的长度并打印新数组
#include<stdio.h>
int* fun(int *p1,int len,int *p2,int *p3)//利用双指针进行处理
{
while(p2<=p3)
{
if(*p1!=*p2)
{
p1++;
*p1=*p2;
p2++;
}
else
{
p2++;
}
}
return p1;
}
int print2(int *p1,int *pi)
{
int *m;
int count=0;
for(m=p1;m<=pi;m++)
{
count++;
printf("%d ",*m);
}
return count;
}
void print(int *p,int len)
{
for(int i=0;i<len;i++)
{
printf("%d ",*(p+i));
}
}
void sort(int *p,int len)
{
int temp=0;
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-1-i;j++)
{
if(*(p+j)>*(p+j+1))
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
}
int main()
{
int a[]={5,4,3,3,2,2,1,1,0,0};
int len=sizeof(a)/sizeof(a[0]);
printf("原数组的长度为%d\n",len);
printf("原数组为:");
print(a,len);
printf("\n");
sort(a,len);
printf("对原数组由小到大排序的结果是:");
print(a,len);
printf("\n");
int *pi=fun(a,len,a+1,a+len-1);
printf("删除重复的元素后结果为:\n");
printf("删除重复的元素后长度为:%d",print2(a,pi));
return 0;
}
此题用到了双指针求解要注意理解双指针的变化过程,排序方法选择了冒泡排序。