(p111)基数排序(子程序是计数排序)
来源:互联网 发布:centos打开防火墙命令 编辑:程序博客网 时间:2024/05/15 09:13
/* * sort.c * * Created on: Feb 14, 2016 * Author: wing */#include<stdio.h>#include<stdlib.h>int figk(int n){int c=0;while (n!=0){c++;n=n/10;}return c;}int getdigit(int n,int k){int i;for (i=1;i<k;i++)n/=10;return n%10;}int digitsort(int *num,int k,int n,int *result){int i,tmp[10];for (i=0;i<10;i++)tmp[i]=0;for (i=1;i<=n;i++)tmp[getdigit(num[i],k)]++;for (i=1;i<=9;i++)tmp[i]+=tmp[i-1];for (i=n;i>0;i--)/*注意一定要downto才行,这实际上是计数排序,只有这样才具有稳定性,关于什么是稳定性,参看算法导论p110*/{result[tmp[getdigit(num[i],k)]]=num[i];tmp[getdigit(num[i],k)]--;}return 0;}int main(void){int *num,n,i,maxk=0,k,*result,*p;scanf("%d",&n);num=(int *)malloc(sizeof(int)*(n+1));result=(int *)malloc(sizeof(int)*(n+1));for (i=1;i<=n;i++){scanf("%d",&num[i]);maxk=figk(num[i])>maxk?figk(num[i]):maxk;}for (k=1;k<=maxk;k++){digitsort(num,k,n,result);p=num;num=result;result=p;/*需要不停的迭代*/}for (i=1;i<=n;i++)printf("%d ",num[i]);/*注意排完序后又交换了一次*/return 0;}
0 0
- (p111)基数排序(子程序是计数排序)
- 基于计数排序子程序的基数排序实现
- 基数排序(基于计数排序)
- 【排序】基数排序(计数排序、桶排序)
- C++基数排序(包含计数排序)
- 计数排序,基数排序
- 计数排序和基数排序
- 计数排序-基数排序
- 计数排序和基数排序
- 基数排序和计数排序
- 计数排序和基数排序
- 计数排序+基数排序
- 计数排序和基数排序
- 基数排序/计数排序
- 计数排序和基数排序
- 基数排序,计数排序
- 计数排序和基数排序
- 计数排序实现基数排序
- Clarke and chemistry
- bzoj1008
- [Linux]Platform设备驱动
- spring(AOP) 注解实现aop
- Android开发学习之路--数据持久化之初体验
- (p111)基数排序(子程序是计数排序)
- ubuntu14.04离线配置cm5.5.1
- 概率统计基础(1)均值、中位数、众数、极差和中程数
- SCU-2511: Moooo【单调栈】
- Java:为jre添加SSL证书
- Codeforces 148D:Bag of mice
- 健身论坛
- 健身菜鸟需要掌握哪些基本的健身常识
- 复合训练动作