安排删除重复条目的数字

时间:2014-09-24 16:13:25

标签: c algorithm sorting data-structures

#include<stdio.h>
int main(){
int a[9],i,j,r,t,min,c=0;
for(r=0;r<9;r++)
    scanf("%d",&a[r]);

for (j=0;j<9;j++) {
    min=a[j];
    for(i=j;i<9;i++) {
        if(a[i] <  min ) {
            c=i;
            min=a[i];
        }
    }
t=a[j];
a[j]=min;
a[c]=t;
}

for(r=0;r<9;r++)
    printf("%d",a[r]);
}

这是我必须按升序排列用户输入的数字的代码。 如果输入为1 2 3 2 4 1 5 6 3输出为1 1 2 2 3 3 4 5 6但我希望输出为1 2 3 4 5 6,即删除重复的条目。请帮助我。

3 个答案:

答案 0 :(得分:1)

如果给出了数字的范围,则可以使用布尔数组来执行此操作,该数组将1存储到元素的相应索引中。

#include <stdio.h>
#include <stdbool.h>
#define NUM_RANGE 10

int main(){
    int num;
    bool freq[NUM_RANGE + 1] = {0};
    for(int r = 0; r < 9; r++){
         scanf("%d",&num);
         freq[num] = 1;
    }

    for (int i = 0; i < NUM_RANGE + 1; i++)
         if(freq[i])
             printf("%d ", i);

}

答案 1 :(得分:1)

#include<stdio.h>

int main(){
    int a[] = {1, 2, 3, 2, 4, 1, 5, 6, 3};
    int n = sizeof(a)/sizeof(*a);
    int i, j, t;

    for (j=0;j<n-1;j++){
        for(i=j+1;i<n;){
            if(a[i] == a[j]){
                t = a[i];
                a[i] = a[--n];
                a[n] = t;
                continue;
            }
            if(a[i] < a[j]){
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
            ++i;
        }
    }
    for(i=0;i<n;i++)
        printf("%d ", a[i]);
    return 0;

}

答案 2 :(得分:0)

所以,这是你可以遵循的程序。

  1. 您对数组进行排序(就像您已经完成的那样)。您的排序算法具有O(n ^ 2)最坏情况运行时间,其中n是数组中元素的数量。如果您关心运行时间,可以达到的最佳运行时间是O(n logn)[MergeSort]。

  2. 接下来,我们需要找到重复项并删除它们。 由于您已经订购了它们,只需循环遍历您的阵列并检查每个数字a [i]和下一个数字a [i + 1]是否不同。如果不是,删除它并通过向前移动阵列的所有其余部分填充空白区域。

  3. 所以:

    for(i = 0; i < 9; i++){
    
       if(a[i] == a[i+1]){
          deletNumber(i); //deletes number at position i in the array and shifts the   
                          //rest of the array so the empty space is filled.
       }
    }
    
    void deleteNumber(int i){
      int j; 
    
      for(j = i; j<8; j++){
    
        a[j] = a[j++];  
      }
    }