对整数数组进行排序以避免在C中重复连续值

时间:2015-10-11 11:08:10

标签: c linux sorting int

我正在使用Linux来实现这种排序。如果我有一个数组arr[] ={1, 1, 1, 2, 2, 3, 3},请按如下方式对其进行排序:

arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 1
arr[4] = 2
arr[5] = 3
arr[6] = 1

我试图做这样的事情:

for (int i = 0; i < size; i++)
{
  if (arr[i] < arr[i+1])
  {

  }
}

请给我一些建议,非常感谢你!

3 个答案:

答案 0 :(得分:0)

提示

首先你必须对数组进行排序,然后从1开始到(结束1)如果活动项等于最后一项将其移动到最后。

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>

/*__________________________________________________
*/
static int __cdecl sortCallback(int *i1,int *i2){
    return (*i1<*i2)?-1:(*i1>*i2)?1:0;
}
/*__________________________________________________
*/

void printArr(char* Title,int *arr,int n){
    int i;
    if(Title)
        printf("%s:\n\t",Title);

    for (i=0;i<n;i++)
        printf("%d ",arr[i]);
    printf("\n");
    return;
}
/*__________________________________________________
*/
void arrange(int *arr,int n){
    int i=1,j;
    int a;
    while(i<(n-1)){
        if(arr[i]==arr[i-1]){
            a=arr[i];
            for(j=i;j<(n+1);j++){
                arr[j]=arr[j+1];
            }
            arr[n-1]=a;
        }else
        i++;
    }
}
/*__________________________________________________
*/
int main(void){
    int arr[7];
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    arr[3] = 1;
    arr[4] = 2;
    arr[5] = 3;
    arr[6] = 1;
    printArr("Initial",arr,7);
    qsort(arr,7,sizeof(int),sortCallback);
    printArr("Sorted",arr,7);

    arrange(arr,7);
    printArr("Rearranged",arr,7);
    return 0;
}

答案 2 :(得分:-1)

#include <stdio.h>

void cnv(int n, int arr[n]){//arr is sorted
    struct {
        int value;
        int occurs;
    } tmp[n];

    //make distinct array
    int k = 0;
    tmp[k].value = arr[0];
    tmp[k].occurs = 1;

    for(int i = 1; i < n; ++i){
        if(arr[i] != arr[i-1]){
            tmp[++k].value = arr[i];
            tmp[k].occurs = 1;
        } else {
            ++tmp[k].occurs;
        }
    }
    //Written back
    for(int i = 0, j = 0; i < n; ++i){
        while(tmp[j].occurs == 0){
            j = (j == k) ? 0 : j + 1;
        }
        arr[i] =  tmp[j].value;
        --tmp[j].occurs;
        j = (j == k) ? 0 : j + 1;
    }
}

int main(void){
    int arr[] ={1, 1, 1, 2, 2, 3, 3};
    int n = sizeof(arr)/sizeof(*arr);
    cnv(n, arr);
    for(int i = 0; i < n; ++i) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}