排序算法之基数排序的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. Androidstudio无法修改按钮颜色
  2. 【译】Persistent reverse (NAT bypassing) SSH tunnel access with autossh
  3. 学Java有什么技巧和方法推荐?
  4. 【python】set集合基础与使用
  5. shell练习DAY14
  6. 2021李宏毅机器学习课程笔记——Auto Encoder
  7. 服务器上配置tp5入口文件,TP5更改入口文件
  8. Python读取excel文件数据并画柱状图
  9. androidstudio 编译apk时出现Error while Launching activity错误
  10. SparkStreaming编程
  11. AI考拉技术分享会—手把手教你入门UI 自动化测试 Appium
  12. 程序员的快乐到底是什么?
  13. 微信小程序web-view的使用教程
  14. PostgreSQL扫描方法综述
  15. .md文件是什么?.md如何打开?
  16. 50个最好的firefox扩展让你尽情冲浪
  17. windows10自带安全扫描
  18. 使用IE11的F12开发人员工具进行网页前端性能测试
  19. Gson按指定字段顺序序列化
  20. http请求头header、请求体body、请求行介绍

热门文章

  1. python bytes转换为string_Python3 中 bytes 和 string 之间的互相转换
  2. 2019计算机组成原理及答案,2019计算机组成原理复习题(一)
  3. 得到进程id_搞懂进程组、会话、控制终端关系,才能明白守护进程干嘛的?
  4. 一个账号可以登录几台机器_干货:一个PubMed账号可以有这么多用处!
  5. java基本要点_java代码的基本要点
  6. 只能获取fixed语句初始值_因用了Insert into select语句,美女同事被开除了!
  7. c语言传入参数不正确,请高手看看一下程序怎么回事啊?老是提示传参数错误...
  8. 接口测试用python怎么做_请问一下python怎么做接口测试工具?
  9. html5实现无缝滚动的效果,基于JavaScript实现无缝滚动效果
  10. spring兼容mysql_springboot 最新版本支持 mysql6.0.6吗