经典排序算法之基数排序(C语言版)
排序算法之基数排序的C语言实现。
#include "math.h"
#include "stdio.h"/*
* 基数排序 2016-04-18 23:43:49
* 基数排序的思想:1.求出数组中最大的元素。
* 2.求出最大元素是几位数。设为i位。
* 3.对所有的数进行i轮排序。首先排个位,然后在十位,然后百位......
* 4.每一轮的排位都需要分桶,桶是有顺序的,然后在把桶里的数按顺序放入原来的数组中。
* 5.直到i轮排序结束后,数组排序完成。
*/extern void RadixSort(int *p, int length);
extern int GetMaxElement(int *p, int length);
extern int GetMaxLoop(int num);
extern void RadixSortBase(int *p, int length, int loop);extern void RadixSort(int *p, int length)
{int max = GetMaxElement(p,length);int loops = GetMaxLoop(max);int i;for (i = 1; i <= loops; ++i){RadixSortBase(p,length,i);}return;
}
extern int GetMaxElement(int *p, int length)
{int i;int max = p[0];for (i = 0; i < length; ++i){if (p[i] > max){max = p[i];}}return max;
}
extern int GetMaxLoop(int num)
{int bits = 1;num /= 10;while (num != NULL){++bits;num /= 10;}return bits;
}
extern void RadixSortBase(int *p, int length, int loop)
{int buickts[10][10] = {};int temp = (int)pow(10.0, loop - 1);int i, j;for (i = 0; i < length; ++i){int row_index = (p[i] / temp) % 10;for (j = 0; j < 10; ++j){if (buickts[row_index][j] != NULL){buickts[row_index][j] = p[i];break;}}}int k = 0;for (i = 0; i < 10; ++i){for (j = 0; j < 10; ++j){if (buickts[i][j] != NULL){p[k] = buickts[i][j];buickts[i][j] = NULL;++k;}}}
}
转载于:https://blog.51cto.com/qiaopeng688/1765226
经典排序算法之基数排序(C语言版)相关推荐
- 经典排序算法之基数排序
经典排序算法之基数排序 1. 基数排序 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较.由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数, ...
- 常用排序算法总结(C语言版)
文章目录 一.排序算法概览 二.算法实现 1.选择排序 2.冒泡排序 3.插入排序 4.快速排序 5.希尔排序 6.桶排序(基数排序) 7.归并排序 8.堆排序 三.总结 一.排序算法概览 可以在Vi ...
- 排序算法之归并排序 ( C语言版 )
归并排序 :(Merge Sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即 ...
- 排序算法-堆排序(C语言版)
堆排序是一种基于完全二叉树结构的一种排序算法,其整体思想很简单,就是构建完全二叉树,但是这里需要引入堆的概念.如下 大顶堆:每个结点的值都大于或等于其左右孩子结点的值 小顶堆:每个结点的值都小于或等于 ...
- 经典排序算法-----归并排序(C语言实现)
算法表述: 归并排序的基本原理是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列.其实通俗来说,对于一个数来说自 ...
- 排序算法模板(C语言版)
1.快速排序 //By LYLtimvoid swap(int *a, int *b) {int t = *a;*a = *b;*b = t; }void QSort(int l, int r) {i ...
- 十种经典排序算法精粹(c语言版本)
下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...
- 终于,把十大经典排序算法汇总了!(Java实现版)
转载自 终于,把十大经典排序算法汇总了!(Java实现版) 最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在" ...
- c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
原标题:10 大经典排序算法(动图演示+ C 语言代码) 来源:C语言与CPP编程 以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. ...
最新文章
- Androidstudio无法修改按钮颜色
- 【译】Persistent reverse (NAT bypassing) SSH tunnel access with autossh
- 学Java有什么技巧和方法推荐?
- 【python】set集合基础与使用
- shell练习DAY14
- 2021李宏毅机器学习课程笔记——Auto Encoder
- 服务器上配置tp5入口文件,TP5更改入口文件
- Python读取excel文件数据并画柱状图
- androidstudio 编译apk时出现Error while Launching activity错误
- SparkStreaming编程
- AI考拉技术分享会—手把手教你入门UI 自动化测试 Appium
- 程序员的快乐到底是什么?
- 微信小程序web-view的使用教程
- PostgreSQL扫描方法综述
- .md文件是什么?.md如何打开?
- 50个最好的firefox扩展让你尽情冲浪
- windows10自带安全扫描
- 使用IE11的F12开发人员工具进行网页前端性能测试
- Gson按指定字段顺序序列化
- http请求头header、请求体body、请求行介绍
热门文章
- python bytes转换为string_Python3 中 bytes 和 string 之间的互相转换
- 2019计算机组成原理及答案,2019计算机组成原理复习题(一)
- 得到进程id_搞懂进程组、会话、控制终端关系,才能明白守护进程干嘛的?
- 一个账号可以登录几台机器_干货:一个PubMed账号可以有这么多用处!
- java基本要点_java代码的基本要点
- 只能获取fixed语句初始值_因用了Insert into select语句,美女同事被开除了!
- c语言传入参数不正确,请高手看看一下程序怎么回事啊?老是提示传参数错误...
- 接口测试用python怎么做_请问一下python怎么做接口测试工具?
- html5实现无缝滚动的效果,基于JavaScript实现无缝滚动效果
- spring兼容mysql_springboot 最新版本支持 mysql6.0.6吗