排序算法之基数排序的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. 经典排序算法之基数排序

    经典排序算法之基数排序 1. 基数排序 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较.由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数, ...

  2. 常用排序算法总结(C语言版)

    文章目录 一.排序算法概览 二.算法实现 1.选择排序 2.冒泡排序 3.插入排序 4.快速排序 5.希尔排序 6.桶排序(基数排序) 7.归并排序 8.堆排序 三.总结 一.排序算法概览 可以在Vi ...

  3. 排序算法之归并排序 ( C语言版 )

    归并排序 :(Merge Sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即 ...

  4. 排序算法-堆排序(C语言版)

    堆排序是一种基于完全二叉树结构的一种排序算法,其整体思想很简单,就是构建完全二叉树,但是这里需要引入堆的概念.如下 大顶堆:每个结点的值都大于或等于其左右孩子结点的值 小顶堆:每个结点的值都小于或等于 ...

  5. 经典排序算法-----归并排序(C语言实现)

    算法表述: 归并排序的基本原理是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列.其实通俗来说,对于一个数来说自 ...

  6. 排序算法模板(C语言版)

    1.快速排序 //By LYLtimvoid swap(int *a, int *b) {int t = *a;*a = *b;*b = t; }void QSort(int l, int r) {i ...

  7. 十种经典排序算法精粹(c语言版本)

    下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...

  8. 终于,把十大经典排序算法汇总了!(Java实现版)

    转载自  终于,把十大经典排序算法汇总了!(Java实现版) 最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在" ...

  9. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)

    原标题:10 大经典排序算法(动图演示+ C 语言代码) 来源:C语言与CPP编程 以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. ...

最新文章

  1. pymysq向mysql写数据 为什么本地无法查看_从运维角度浅谈MySQL数据库优化,中小企业DBA必会...
  2. env: zh_CN.GB2312:: No such file or directory
  3. 成功解决 SyntaxError: invalid token
  4. matlab中find()函数用法
  5. 音频信号发生器_1957年,DIY的Hi-Fi 电唱机单电子管音频发生器的音质保真度高...
  6. 让 C#智能注释时允许换行
  7. [Java]中[this][super]用法总结
  8. leetcode33 --- search
  9. 菜鸟Linux系列:[4]SSH免密码登陆远程服务器
  10. C#中的i++和++i
  11. 关于配置环境变量相关解答
  12. 马尔可夫链的扩展 贝叶斯网络 (Bayesian Networks)
  13. linux 帐号 配置sftp_Linux 下sftp配置之密钥方式登录详解
  14. LeetCode 404 左叶子之和
  15. 使用Arduino和HMC5883L磁力计的数字罗盘
  16. 成都理工大学计算机类中外合办,成都理工大学代码
  17. 时间序列分析_餐厅销量预测_2022_5_14
  18. %f 与 %lf的区别
  19. vscode win10笔记本 蓝屏_win10蓝屏错误代码大全详解
  20. python 十进制转二进制

热门文章

  1. [Leetcode16]最接近的三数之和
  2. MySQL read-c_技术分享 | MySQL C API 参数 MYSQL_OPT_READ_TIMEOUT 的一些行为分析
  3. ubuntu 自动加载ko_linux驱动模块开机自动加载,以及应用程序开机自启动
  4. 心理学博士vs计算机博士,零基础跨专业考心理学博士,可以给我一些建议吗?...
  5. oracle数据分布不均,oracle性能优化操作七:索引提高数据分布不均匀时查询效率...
  6. python 函数 全局变量_python3函数内全局变量使用global
  7. android开发按钮颜色,Android编程实现简单设置按钮颜色的方法
  8. 【JAVA基础篇】Socket编程
  9. 毕昇 JDK:“传奇再现”华为如何打造 ARM 上最好用的 JDK?
  10. 如何删除 eclipse 中多余的 Tomcat server?为什么产生这种 bug?