首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

自己写的 关于 C语言 “线性排序”有关问题

2012-09-09 
自己写的 关于 C语言 “线性排序”问题#include stdio.h#include stdlib.hint *linear_sort(int *a, int

自己写的 关于 C语言 “线性排序”问题

#include <stdio.h>#include <stdlib.h>int *linear_sort(int *a, int n){int max = 0, min = 0, i = 0, j = 0, *b = NULL, *c = NULL, *r = NULL;for (i=0; i<n; i++) {if(a[i] >= max) max = a[i]+1;if(a[i] < 0 && a[i] < min) min = a[i];}if ((b = (int *) calloc(max , sizeof(int))) == NULL) exit(1);if (-min) if ((c = (int *) calloc(-min , sizeof(int))) == NULL) exit(1);if ((r = (int *) calloc(n , sizeof(int))) == NULL) exit(1);for (i=0; i<n; i++) if(a[i]>=0) b[a[i]]++; else c[-a[i]]++;for (i=-min; i>0; i--) while (c[i]-- > 0) r[j++] = -i;  for (i=0, n=max; i<n; i++) while (b[i]-- > 0) r[j++] = i; free(b); free(c); // release pointerb == NULL; c == NULL; // no wild pointerreturn r;}int main(){int a[] = {4,5,4,1,4,90,5,50,70,1,20,50,65536,0,-3,-1,-4,-2,-6552,999};int i = 0, n = sizeof(a)/sizeof(int);int *b = linear_sort(a, n);for (i=0; i<n; i++) {printf("%d\n",b[i]);}free(b); b = NULL; // release pointer}
?

运行结果:

hu@xunleiman-desktop:~/tmp$ gcc t.c; ./a.out
-6552
-4
-3
-2
-1
0
1
1
4
4
4
5
5
20
50
50
70
90
999
65536

?

热点排行