0
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

4

2 回答 2

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");
}
于 2013-06-26T14:24:38.030 回答
0

你可以试试这个方法。

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

这会成功的。

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]);
    }
于 2013-06-26T10:52:35.443 回答