C语言:删除已经排序的整型数组中的重复值
#include <stdio.h> //每找到一个重复的元素,则最末尾前移一位,去重范围缩小一位 //找到重复元素后,此时数组下标之后的元素向前移一位 //程序后,数组中最右边的值是原数组最右边的值 main() { //int a[]={1,1,1,1,2,2,2,2,2,3,4,5,5,6,7,7,8,8,8,9,9,10,10,12}; int a[]={100,100,87,87,87,76,54,54,34,34,34,21,21,21,20,9,8,8,8,8,7,7,6,6,6,6,1}; int len=sizeof(a)/sizeof(a[0]); int i,j,k,m=len; for(i=0;i<len;i++) { for(j=i+1;j<len;j++) if(a[i]==a[j]) { for(k=j;k<len-1;k++) { a[k]=a[k+1]; } len--;//整个数组去重范围缩小 j--;//重置到上一次的去重起始位置 } } for(i=0;i<len-1;i++) printf("%d ",a[i]); printf("%d",a[i]); getchar(); }
#include <stdio.h> //从第二个整数开始与第1个整数比较,如果不相等则替换a[j],j++, main() { //int a[]={100,100,87,87,87,76,54,54,34,34,34,21,21,21,20,9,8,8,8,8,7,7,6,6,6,6,1}; int a[]={1,1,1,1,2,2,2,2,2,3,4,5,5,6,7,7,8,8,8,9,9,10,10,12}; int i,j,len=sizeof(a)/sizeof(a[0]); j=1; for(i=1;i<len;i++) { if(a[j-1]!=a[i]) a[j]=a[i],j++; } for(i=0;i<j;i++) printf("%d ",a[i]); getchar(); }
#include <stdio.h> //每找到一个重复的元素,则最末尾前移一位,去重范围缩小一位 //找到重复元素后,此时数组下标之后的元素向前移一位 //程序后,数组中最右边的值是原数组最右边的值 main() { //int a[]={1,1,1,1,2,2,2,2,2,3,4,5,5,6,7,7,8,8,8,9,9,10,10,12}; int a[]={100,100,87,87,87,76,54,54,34,34,34,21,21,21,20,9,8,8,8,8,7,7,6,6,6,6,1}; int len=sizeof(a)/sizeof(a[0]); int i,j,k,m=len; for(i=0;i<len;i++) { for(j=i+1;j<len;j++) if(a[i]==a[j]) { for(k=j;k<len-1;k++) { a[k]=a[k+1]; } len--;//整个数组去重范围缩小 j--;//重置到上一次的去重起始位置 } } for(i=0;i<m-1;i++) printf("%d ",a[i]); printf("%d",a[i]); getchar(); }