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;
}
我的代碼非常適合正整數,但我需要修改它,以便它也可以對負整數進行排序。我希望你能幫助我。我沒有別的話要說,但除非我在這裏寫點東西,否則我不能發表問題,所以我希望這已經足夠了。我必須對我的代碼進行哪些更改才能對負數進行排序?
格式化您的代碼,它是不可讀的。 – 2015-01-20 19:30:20
而且從不*寫出像B [ - C [array [j]]] = array [j];'的東西。這太難以遵循。 – Kevin 2015-01-20 19:30:54
您的計數排序適用於某個範圍的整數,此時[0,1000]。您不強制執行該範圍,並且數組中的數字2000與負數數字一樣差。無論如何:你可以找到最低的數字'base'和索引'C [arr [i] - base]'。 – 2015-01-20 19:34:48