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

 

posted @ 2022-10-17 08:39  myrj  阅读(148)  评论(0编辑  收藏  举报