【经典回放】多种语言系列数据结构算法:基数排序
目录
一、算法思路
二、C#语言实现
三、C语言实现
一、算法思路
1. 思想基础
基数排序的思想就是先找出待排序中的最大者,然后按最大者申请一个足够大的内存空间,并将其初始化为零,然后将所有待排序的数装入其中,标记装入的数,最后按下标依次返回所有数即可。
2. 函数
public void RadixSort(int []A,int n)
{
int Max,i,j,m,nz;
Max=A[0];
for (i=0;i<n;i++)//获得待排序列中的最大值
{
if (A[i]>Max)
Max=A[i];
}
Max++;
//以这个最大树为桶申请内存,装入所有数
int[] pt = new int[Max];
for(i=0;i<Max;i++)//将数组中的所有数初始化为零
pt[i]=0;
for(i=0;i<n;i++)//把这些数据逐个放入这些桶里
{
m=A[i];
pt[m]++;//让装入的数去做数组的下标
}
m=0; //回收数据,m是排序结果的下标值
for(i=0;i<Max;i++)
{
nz=pt[i];
for(j=0;j<nz;j++)
A[m++]=i;
}
}
二、C#语言实现
private void button1_Click(object sender, EventArgs e)
{int i;int []a={278,109,63,83,930,589,184,505,269,8,83};//待排序数RadixSort(a,11);listBox1.Items.Clear();for (i = 0; i < 10; i++)listBox1.Items.Add(a[i].ToString());
}
private void button2_Click(object sender, EventArgs e)
{this.Close();
}
运行情况(完整程序见工程“基数排序”):
从上面可以看出,基数排序的思想和过程都比较简单,但效率不是很高。通过该程序,使得对计算机内存有了更深层次的理解;对于基数排序方法,要注意三点:1 构造桶;2 把数据放进桶里; 3 回收数据。
三、C语言实现
#include<stdlib.h>
#include<stdio.h>
#include<windows.h>
void RadixSort(int A[],int n)
{
int Max,i,j,m,nz;
int *pt;
Max=A[0];
for (i=0;i<n;i++){if (A[i]>Max) Max=A[i];}
Max++;
pt=(int *)malloc(Max*sizeof(int));
if (!pt) return;for(i=0;i<Max;i++)pt[i]=0;for(i=0;i<n;i++){m=A[i];pt[m]++;}
m=0;
for(i=0;i<Max;i++){nz=pt[i];for(j=0;j<nz;j++)A[m++]=i;}
free(pt);
}
//获得n个不重复的随机数,具体算法不用管
void CreateData(int A[],int n)
{int i,j;srand((unsigned)time(NULL));for(i=0;i<n;i++){A[i]=rand()%n;//以下内容是消除重复,但在数据规模很大的情况下这个过程异常缓慢。/*for(j=0;j<i;j++)while(A[j]==A[i]){A[i]=rand()%n;j=0;}*/}
}void DispTime(SYSTEMTIME sys)
{printf("%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n" ,sys.wYear,sys.wMonth,sys.wDay ,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds ,sys.wDayOfWeek);
}char * DiffTime(SYSTEMTIME systime0,SYSTEMTIME systime1)
{char st[128];sprintf(st,"%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",systime0.wYear-systime1.wYear,systime0.wMonth-systime1.wMonth,systime0.wDay-systime1.wDay ,systime0.wHour-systime1.wHour,systime0.wMinute-systime1.wMinute,systime0.wSecond-systime1.wSecond,systime0.wMilliseconds-systime1.wMilliseconds ,systime0.wDayOfWeek-systime1.wDayOfWeek); return st;
}main()
{int i,n=0,m;int *A;SYSTEMTIME sys0,sys1;printf("请输入要排序的数据个数:");scanf("%d",&m);if(m<0){printf("滚!不解释~\n");exit(0);}A=(int *)malloc(sizeof(int)*m);if(A==NULL){printf("内存不足、程序退出\n");exit(0);}//获得随机数CreateData(A,m);printf("测试数据构造完成\n");GetLocalTime(&sys0); RadixSort(A,m);GetLocalTime(&sys1); //打印数据,在数据规模大的情况下很慢/*n=0;for(i=0;i<m;i++){printf("%d\t",A[i]);n++;if(n==10) {printf("\n");n=0;}}printf("\n");*/DispTime(sys0);DispTime(sys1);printf("用时:%s\n",DiffTime(sys1,sys0));free(A);
}
【经典回放】多种语言系列数据结构算法:基数排序相关推荐
- 【经典回放】多种语言系列数据结构算法:栈(JavaScript版)
本文采用JavaScript语言实现栈结构算法并举例应用. JavaScript的栈是数组对象中自动提供的,这点如同C#,实际也不需要自己编写什么栈的程序,如果你用: var s=new Array( ...
- 【经典回放】多种语言系列数据结构算法:归并排序
目录 干货1:C#语言实现归并排序! 干货2:C语言实现归并排序! 干货1:C#语言实现归并排序! 一.算法 1.思想基础
- 【经典回放】多种语言系列数据结构算法:二叉树(C#版)
实验任务描述 1 用C#语言完成二叉树的类.并构造出一个二叉树: 2 用递归方法完成二叉树的遍历: 3 泛型的二叉树遍历之一.用队列给出遍历结果 4 泛型的二叉树遍历之二.委托方式给出二叉树遍历结果 ...
- 【经典回放】多种语言系列数据结构算法:树(C#、JavaScript、VB6版)
目 录 一.树的C#语言实现以及显示 二.树的JavaScript语言实现以及显示 三.树的VB6语言实现以及显示 一.树的C#语言实现以及显示 1
- 【经典回放】多种语言系列数据结构算法:串(C版)
我们这里说的串.就是标准的C语言的串,这点,和我们教材中另行定义的串并不一致.我们这里强调仅仅是按C语言的标准处理串,是因为你会按C语言的标准构造串.而不是按其它的模式定义的.在我们的教材上,串相当与 ...
- 【经典回放】多种语言系列数据结构算法:队列(C版)
一.队列ADT以及C语言实现 1 队列的原理以及ADT分析 队列是说:把一些数据按先进先出来组织,如同日常生活中的排队过程. 队列最主要的操作是 <1> 数据加入队列:<2> ...
- 【经典回放】多种语言系列数据结构算法:数组
数组如同前面学过的顺序表,一次性申请一片地址连续的存储空间,我们还知道,计算机中数组是以一维的形式存储的,因为计算机的内存的一维的.在知道了多维数据的计算机存储方式后,我们还要知道构造一个多维数据的方 ...
- 【经典回放】多种语言系列数据结构算法:堆排序
目录 一.堆排序算法分析 二.C#语言实现堆排序 三.C语言实现堆排序 一.堆排序算法分析
- 【经典回放】多种语言系列数据结构算法:快速排序
快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1960年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另 ...
最新文章
- linux fdisk 分区、格式化、挂载
- 雷军旗下金山云冲刺IPO:3年营收74亿,小米系贡献23%,CEO王育林仅持股2.1%
- teach and learn
- rsa.FromXmlString 系统找不到指定的文件
- ORA-20000: ORU-10027: 执行存储过程的错误
- Extjs4前端开发代码规范参考
- 【XML】XML实例模板
- 微信内置浏览器调起外部浏览器打开指定网页连接
- JS规则 自加一,自减一 ( ++和- -) 【mynum = mynum + 1;//等同于mynum++;】
- 华为路由器第三方插件_为什么路由器不开 SSH 就等于失去了很多乐趣?
- SQLServer中替换某字段的部分内容
- oracle ogg是什么
- Zookeeper简介,架构,单机版搭建
- HTML5笔记(一)
- CDRshp文件转html,CDR转PDF设置教程-告诉你如何把cdr转换成适合印刷的pdf
- Jquery选择器:通过class名获取ID
- 郊区春游(状压DP水题)+ 记录路径
- python爬取陌生人的qq空间_Python爬取QQ空间好友说说并生成词云(超详细)
- 多线程加速图像模板匹配
- 进程和线程上下文切换_编码人员:上下文切换对于计算机和关系而言都很难
热门文章
- 思科3550 IOS
- .NET6之MiniAPI(十八):OpenAPI swagger
- 使用C#体验函数式编程之——Partial application(局部应用)
- 国产数据库占央采九成份额
- Blazor VS React / Angular / Vue.js
- IdentityServer4系列 | 资源密码凭证模式
- .Net Core中的诊断日志DiagnosticSource讲解
- 使用 Docker 搭建 PostgreSQL 12 主从环境
- 使用 postman 给 API 写测试
- MediatR-进程内的消息通信框架