2015-01-20 28 views
0
#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; 
} 

我的代碼非常適合正整數,但我需要修改它,以便它也可以對負整數進行排序。我希望你能幫助我。我沒有別的話要說,但除非我在這裏寫點東西,否則我不能發表問題,所以我希望這已經足夠了。我必須對我的代碼進行哪些更改才能對負數進行排序?

+0

格式化您的代碼,它是不可讀的。 – 2015-01-20 19:30:20

+1

而且從不*寫出像B [ - C [array [j]]] = array [j];'的東西。這太難以遵循。 – Kevin 2015-01-20 19:30:54

+3

您的計數排序適用於某個範圍的整數,此時[0,1000]。您不強制執行該範圍,並且數組中的數字2000與負數數字一樣差。無論如何:你可以找到最低的數字'base'和索引'C [arr [i] - base]'。 – 2015-01-20 19:34:48

回答

0

使用鏈表,Glist存在於GObject庫中。如果你只需要處理32位整數,你可以用很少的額外編程來使用它。當你從文件perfom中讀取整數時,在while循環中插入排序。

相關問題