将无序数列升序排列,并输出排列结果和排列后的下标
2016-01-06 01:08
281 查看
#include<stdio.h> #include<stdlib.h> int main() { int a[] = { 8,3,10,5,7,1,2,6,4,9 }; //待排序数组 int temp[20] = { 0 }; int result[20]; //下标存入的数组 int n = sizeof(a) / sizeof(a[0]); //数组长度 int i; for (i = 0; i < n; i++) //得到每个数字出现的个数,temp[i]为i的个数 temp[a[i]]++; //eg:temp[5]为5出现的个数 for (i = 1; i < 20; i++) //得到小于等于i的数的个数,temp[i]为小于等于i的个数 temp[i] += temp[i - 1]; //eg:temp[5]为小于等于5的数出现的个数 for (i = 0; i < n; i++) //--temp[a[i]]表示a[i]这个数排列后应该放的位置 result[--temp[a[i]]] = i; //表示把下标放在该放的位置上,i表示下标 for (i = 0; i < n; i++) //输出下标所在的位置 printf("%d ", result[i]); printf("\n"); for (i = 0; i < n; i++) //输出升序排列的结果 printf("%d ", a[result[i]]); system("pause"); return 0; }
相关文章推荐
- 从键盘输入一个正偶数,将该偶数拆分成两个素数之和
- 时间管理,从洗碗开始 推荐
- 认知错误---------------------------------------一点一滴记录
- 关于引入文件名字问题
- [看书日记20160106]Activity的Flags , IntentFilter ,Android的消息机制
- HDU 1177."Accepted today?"【结构体排序(水)】【1月6】
- How MapReduce Works
- 静态分配和动态分配内存的区别
- IP学习
- Linux系统密钥验证(附件有实验过程和截图)
- windows 运行命令大全
- Android退出应用最优雅的方式(改进版)
- 转载的一篇关于vld的文章
- 2015年12月工作总结
- 远程链接服务器工具的使用
- linux看视频黑屏和无法调节屏幕亮度
- QStringLiteral的两篇外文解释(编译期转换成QString)
- hadoop集群搭建【伪分布式】
- 数据结构 JAVA描述(十五) 动态查找表 二叉排序树 二叉平衡树
- BigDecimal的学习