#include <stdio.h> #include <stdlib.h> 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 max = 0, min = 0, i = 0,n = 0, *b = NULL, *c = NULL; for (i=0, n=sizeof(a)/sizeof(int); i<n; i++) if(a[i] >= max) max = a[i]+1; for (i=0, n=sizeof(a)/sizeof(int); i<n; i++) if(a[i] < 0 && a[i] < min) min = a[i]; if ((b = (int *) calloc(max , sizeof(int))) == NULL) return 1; if (-min) if ((c = (int *) calloc(-min , sizeof(int))) == NULL) return 1; for (i=0, n=sizeof(a)/sizeof(int); i<n; i++) if(a[i]>=0) b[a[i]]++; else c[-a[i]]++; for (i=-min; i>0; i--) while (c[i]-- > 0) printf("%d\n",-i); for (i=0, n=max; i<n; i++) while (b[i]-- > 0) printf("%d\n",i); free(b); free(c); // release pointer b = NULL; c = NULL; // no wild pointer return 0; }
运行:gcc c.c; ./a.out
输出:
-6552
-4
-3
-2
-1
0
1
1
4
4
4
5
5
20
50
50
70
90
999
65536
===========================华丽的分割线====================================
于 2012年2月20日更新:
#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 pointer b = NULL; c = NULL; // no wild pointer return 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
相关推荐
自己收集的东西 c语言算法集:插值法 非线性方程组 复数运算 极值问题 拟合与逼近 排序 数值积分 随机数产生 图形模式下读写屏幕 线性代数方程组
数据排序的几种方法(c语言实现),自己写的,很实用
数据结构-基于C语言实现线性顺序表的增删改查+排序,合表操作
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若,v> ∈E(G),则u在线性序列中出现在v之前。
C语言编写基于链式存储的线性表(链表) 含以下基本操作: 1.初始化、删除、清空链表 2.判断是否为空、返回长度 3.插入、删除 4.输出链表 5.寻找前一个节点、后一个节点 6.排序
(1)熟悉将算法转换为程序代码的过程。 (2)了解顺序表的逻辑结构特性,熟练学握顺序表存储结构的 C 语言描述... (5)熟练掌握线性链表(单链表)的基本运算:查找、插入、删除等,能在实际应用中灵活选择适当的链表结构。
【实验内容】 1、以自己班级同学记录为例(不少于10条记录)建立基于学号...2、以自己班级同学记录为例(不少于10条记录)实现某科成绩的排序输出,要求排序算法采用堆排序,输出的信息包括学生学号、姓名和该科成绩。
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若,v> ∈E(G),则u在线性序列中出现在v之前。
学生在c语言学习中实验题目,包括单链表,指针,排序,单链表的插入,删除等
五种全面的排序算法,除了你熟悉的冒泡法、选择法,你还有用过其它的吗?那就下载看看吧! 五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。这里设计和实现了一个人机对下的...
C语言版 数据结构与算法课程 第2章 线性表 线性数据结构(共122页).ppt C语言版 数据结构与算法课程 第3章 排序算法基础(共46页).ppt C语言版 数据结构与算法课程 第4章 哈希表(共49页).ppt C语言版 数据结构与...
C语言版 数据结构与算法课程 第2章 线性表 线性数据结构(共122页).ppt C语言版 数据结构与算法课程 第3章 排序算法基础(共46页).ppt C语言版 数据结构与算法课程 第4章 哈希表(共49页).ppt C语言版 数据结构与...
用C语言编写的数据结构演示...主要使用Dos演示数据结构的线性结构(数组,链表,串,队列和栈)、树(树的遍历,平衡二叉排序树)和排序结构(简单排序,堆排序,快速排序,归并排序),并且附有完整的程序设计报告。
C语言版 数据结构与算法课程 第2章 线性表 线性数据结构(共122页).ppt C语言版 数据结构与算法课程 第3章 排序算法基础(共46页).ppt C语言版 数据结构与算法课程 第4章 哈希表(共49页).ppt C语言版 数据结构与...
书中所有的算法均用C语言描述: 第1章 多项式的计算 第2章 复数运算 第3章 随机数的产生 第4章 矩阵运算 第5章 矩阵特征值与特征向量的计算 第6章 线性代数方程组的求解 第7章 非线性方程与方程组的求解 第8章 插值...
《C语言算法速查手册》用C语言编写了科研和工程中最常用的166个算法,这些算法包括复数运算、多项式的计算、矩阵运算、线性代数方程组的求解、非线性方程与方程组的求解、代数插值法、数值积分法、常微分方程(组)...
这个程序是C语言版的,主函数的功能是动态输入两个线性链表的数据,子函数的功能是将两个线性链表合并并将数据按非递减序列排序。
主要介绍用C语言,并结合使用MPI和OpenMP进行并行程序设计,内容包括并行体系结构、并行算法设计、消息传递编程、Eratosthenes 筛法、Floyd 算法、性能分析、矩阵向量乘法、文档分类、蒙特卡洛法、矩阵乘法、线性...
其主要内容包括多项式的计算、复数运算、随机数的产生、矩阵特征值与特征向量的计算、线性代数方程组的求解、非线性方程与方程组的求解、插值与逼近、数值积分、常微分方程组的求解、数学变换与滤波、特殊函数的计算...
插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位 希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。...