仅向数组写入不同的值

时间:2013-06-26 10:24:10

标签: c

void sort_int_array(int A[], int n) {
    int i, j, h, k, O[n];
    /* assume that A[0] to A[n-1] have valid values */
    for (i=1; i<n; i++) {
        /* swap A[i] left into correct position */
        for (j=i-1; j>=0 && A[j+1] <= A[j]; j--) {
            int_swap(&A[j], &A[j+1]);
            for (k=0; k<n; k++) {
                 for (h = 0; h < k; h++) {
                    if (A[k] == O[h]) {
                         break;
                    }
                    else {
                        O[k] = A[k];
                    }
                }
            }
        }   
    }
}   

我试图只将排序数组中的不同值写入另一个数组。该函数的第一部分对数组进行排序,但是当我将其写入我的新数组时,它返回已排序的数组并且不会删除副本。

例如。输入:4 5 6 7 6 5 4.输出:4 4 5 5 6 6 7.

需要输出:4 5 6 7

2 个答案:

答案 0 :(得分:0)

你可以这样试试。

  1. 首先对数组进行排序。 4 4 5 5 6 6 7
  2. 第一个元素总是不同的。将其复制到第二个数组中。
  3. 现在,从排序数组中的第二个元素开始,并在与第二个数组中存在的一个元素进行比较后进行复制。
  4. 如果已排序[i] ==输出[j],请忽略或说增量i。
  5. 否则,将ith元素复制到输出数组,同时递增j和i
  6. 在您完全遍历已排序的数组时执行此操作。
  7. 这样就可以了。

    int[] arr = {4,4,5,5,6,6,7};
        int out[]= {0}; // or may be some size
        int i=1;
        out[0] = arr[0];
        int j=0;
        while(i<arr_length){
            if(arr[i]!=out[j]){
                out[++j]=arr[i];
            }
            i++;
        }
        for(int k=0;k<out_length;k++){
            printf("%d,",out[k]);
        }
    

答案 1 :(得分:0)

void sort_int_array(int A[], int n) {
    int i, j, k, O[n];
    for(k=i=0; i<n; ++i){
        for(j=i+1;j<n;++j){
            if(A[j]<A[i])
                int_swap(&A[j],&A[i]);
        }
        if(i==0 || O[k-1] < A[i])
            O[k++]=A[i];
    }
    printf("DEBUG:");
    for(i=0;i<k;++i)
        printf("%d ", O[i]);
    printf("\n");
}