C 我必须对我的代码进行哪些更改,以便它也对负数进行排序?

C 我必须对我的代码进行哪些更改,以便它也对负数进行排序?,c,sorting,C,Sorting,我的代码对于正整数非常有效,但我需要修改它,以便它也可以对负整数进行排序。我希望你能帮助我。我没有什么要说的,但是我不能发布问题,除非我在这里写一些关于它的东西,所以我希望它足够了。使用链接列表,通用列表在GObject库中存在。如果您只需要处理32位整数,则只需很少的额外编程即可使用它。当你从文件中读取整数时,在while循环中执行插入排序。格式化你的代码,它是不可读的。而且永远不要写像B[-C[array[j]]]=array[j];。这太难理解了。您的计数排序适用于某个范围的整数,目前为[

我的代码对于正整数非常有效,但我需要修改它,以便它也可以对负整数进行排序。我希望你能帮助我。我没有什么要说的,但是我不能发布问题,除非我在这里写一些关于它的东西,所以我希望它足够了。

使用链接列表,通用列表在GObject库中存在。如果您只需要处理32位整数,则只需很少的额外编程即可使用它。当你从文件中读取整数时,在while循环中执行插入排序。

格式化你的代码,它是不可读的。而且永远不要写像B[-C[array[j]]]=array[j];。这太难理解了。您的计数排序适用于某个范围的整数,目前为[0,1000]。您不强制该范围,数组中的数字2000与负数一样糟糕。无论如何,您可以找到最低的基数和索引C[arr[i]-base]除了MOehm的建议,如果你计算出最大值和最小值,你可以用malloc动态地分配C。那么你就没有范围限制了。
#include<stdio.h>   


void countingSort(int array[], int k, int n){
    int i,j;
    int B[100],C[1000];
    for (i=0;i<=k;i++)
    {
       C[i]=0;
    }
    for (j=0;j<n;j++)
    {
        C[array[j]]++;
    }
    for (i=1;i<=k;i++)
    {
        C[i]+=C[i-1];
    }
    for (j=0;j<n;j++)
    {
        B[--C[array[j]]]=array[j];
    }
    printf("Sortiran niz je: \n");
    for(i=0;i<n;i++)
    {
        printf("%d ", B[i]);
    }
    printf("\n");
}

void max(int array[], int *k,int n){
    int i;
    printf("Broj elemenata u nizu je %d\n",n);
    for(i=0;i<n;i++)
    {
        if(array[i]>*k) {
            *k=array[i];
        }
    }
}

int main(int brArg, char *arg[]){
    FILE *ulaz;
    ulaz=fopen(arg[1],"r");

    int array[1000];
    int i=0,j,k=0,n,x,m;

    while(fscanf(ulaz,"%d", &array[i])!=EOF)    
        i++;
    fclose(ulaz);
    n=i;    
    max(array,&k,n);
    countingSort(array,k,n);
    return 0;
}