基数排序的C程序

排序算法是一种按特定顺序排列列表组件的算法。最常用的顺序是数字顺序和字典顺序。

基数排序是一种非比较排序算法。基数排序算法是未排序列表的首选算法。

它通过最初对相同位值的各个数字进行分组来对元素进行排序。基数排序的思想是按照递增/递减顺序从最低有效数字(LSD)到最高有效数字(MSD)进行逐位排序。基数排序是一种小方法,在按字母顺序排列超大名称列表时会多次使用。具体来说,名称列表最初是根据每个名称的首字母进行排序的,即名称被组织为二十六个类别。

让我们回顾一下下面的插图,以便清楚地了解工作原理基数排序算法。显然,传递/迭代的次数取决于最高个体数字的大小。

基数排序的C程序

在上面的示例中,输入的是主列。其余列显示对越来越重要的数字位置进行连续排序后的列表。

基数排序的复杂性分析 O(m.n)。

但是,如果我们看一下这两个值,键的大小与键的数量相比相对较小。举个例子,如果我们有六位数字的密钥,我们可能有 1,000,000 条完全不同的记录。

在这里,我们往往会看到密钥的大小并不重要,并且该算法是线性质量 O(n)

算法

Radix_sort (list, n)shift = 1for loop = 1 to keysize do   for entry = 1 to n do   bucketnumber = (list[entry].key / shift) mod 10   append (bucket[bucketnumber], list[entry])list = combinebuckets()shift = shift * 10

示例

这是一个实现基数排序的 C 程序。

 现场演示

#includeint get_max (int a[], int n){   int max = a[0];   for (int i = 1; i  max)         max = a[i];   return max;}void radix_sort (int a[], int n){   int bucket[10][10], bucket_cnt[10];   int i, j, k, r, NOP = 0, divisor = 1, lar, pass;   lar = get_max (a, n);   while (lar > 0){      NOP++;      lar /= 10;   }   for (pass = 0; pass < NOP; pass++){      for (i = 0; i < 10; i++){         bucket_cnt[i] = 0;      }      for (i = 0; i < n; i++){         r = (a[i] / divisor) % 10;         bucket[r][bucket_cnt[r]] = a[i];         bucket_cnt[r] += 1;      }      i = 0;      for (k = 0; k < 10; k++){         for (j = 0; j < bucket_cnt[k]; j++){            a[i] = bucket[k][j];            i++;         }      }      divisor *= 10;      printf ("After pass %d : ", pass + 1);      for (i = 0; i < n; i++)         printf ("%d ", a[i]);      printf ("

"); }}int main (){ int i, n, a[10]; printf ("Enter the number of items to be sorted: "); scanf ("%d", &n); printf ("Enter items: "); for (i = 0; i < n; i++){ scanf ("%d", &a[i]); } radix_sort (a, n); printf ("Sorted items : "); for (i = 0; i < n; i++) printf ("%d ", a[i]); printf ("

"); return 0;}

输出

Enter number of items to be sorted 6Enter items:567 789 121 212 563 562After pass 1 : 121 212 562 563 567 789After pass 2 : 212 121 562 563 567 789After pass 3 : 121 212 562 563 567 789Sorted items : 121 212 562 563 567 789

以上就是基数排序的C程序的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444298.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:20:13
下一篇 2025年12月8日 05:40:54

相关推荐

  • 给定一个数字,编写一个C程序来找到斐波那契数列

    斐波那契数列是通过将前两个数字相加得到的一系列数字。 斐波那契数列从两个数字f0和f1开始。 fo和f1的初始值可以取0、1或1、1。 Fibonacci序列满足以下条件: fn = fn-1 + fn-2 算法 参考Fibonacci序列的算法。 STARTStep 1: Read integer…

    2025年12月17日
    000
  • C++程序:按字母顺序重新排列单词的位置

    在这个问题中,一个字符串被作为输入,我们必须按字典顺序对字符串中出现的单词进行排序。为此,我们为字符串中的每个单词(之间用空格区分)分配一个从 1 开始的索引,并以排序索引的形式获得输出。 String = {“Hello”, “World”}“Hello” = 1“World” = 2 由于输入字…

    2025年12月17日
    000
  • 编写一个C程序,将给定的天数转换为年、周和天

    给定了天数,任务是将给定的天数转换为年、周和天。 让我们假设一年中的天数 =365 年数=(天数)/365 解释-:年数将是除以给定天数得到的商与 365 周数 = (天数 % 365) / 7 解释-:周数将通过收集余数获得将天数除以 365,再除以一周的天数 7。 天数 = (天数 % 365)…

    2025年12月17日
    000
  • 在C程序中,从给定的数组中打印下三角矩阵模式

    给定一个 n x n 的矩阵,任务是以下三角形式打印出该矩阵。 下三角矩阵是一个矩阵,其主对角线以下的元素包括主对角线元素,其余元素均为零。 我们通过以下图示来理解: 上述绿色元素是主对角线以下的元素,红色元素是主对角线以上的元素,它们被设为零。 示例 Input: matrix[3][3] = {…

    2025年12月17日
    000
  • 给定输入的C程序,移除括号

    问题 让我们通过删除表达式中的括号来创建一个简化的表达式。 解决方案 示例 1 Input: A string expression with bracket is as follows:(x+y)+(z+q)The output is as follows:x+y+z+q 示例 2 The inp…

    2025年12月17日
    000
  • C++程序遍历字典

    虽然C++没有字典,但它有一种类似字典的结构,称为map。每个map的条目中包含两个值−键和映射值−。每个项目都使用键值进行索引,而映射值是与键相关联的值。映射值可能是唯一的,也可能不是唯一的,但键始终是唯一的。在本教程中,我们将看一下迭代器以及它们如何与map一起工作。 在C++中的迭代器 迭代器…

    2025年12月17日
    000
  • C++程序以给定弧度值找到双曲余弦值

    双曲函数是使用双曲线而不是圆定义的,与普通三角函数相当。双曲函数在双曲几何中用于计算角度和距离。它们还出现在大量线性微分方程、三次方程等的解中。对于给定的角度$theta$。双曲余弦函数 cosh$(theta)$ 如下 $$mathrm{cos(x):=:frac{e^x:+:e^{-x}}{2}…

    2025年12月17日
    000
  • C程序:两个分数相加

    给定输入为分数,即 a/b 和 c/d,其中 a、b、c 和 d 可以是除 0 以外的任何整数值,任务是将这两个分数相加以生成它们的最终和。 分数用 − 表示 a / b,其中 a 被称为分子,b 被称为分母。a 和 b 可以有任何数值,但 b 不能为 0。两个分数的和表示为 a / b + c /…

    2025年12月17日
    000
  • C++程序用于找到给定矩阵的迹和法线

    一些应用程序可以从二维数组或矩阵的使用中受益匪浅。数字存储在矩阵的行和列中。使用多维数组,我们也可以用 C++ 定义 2D 矩阵。在这篇文章中,我们将了解如何使用 C++确定给定矩阵的法线和迹线。 矩阵中元素总数的平方根就是所谓的普通的。迹线由构成主对角线的所有组件组成。让我们查看 C++ 代码中算…

    2025年12月17日
    000
  • 使用结构体编写的C程序,用于计算圆和圆柱体的面积

    在C编程语言中,我们可以利用结构体来找到圆的面积、圆柱体的面积和体积。 用于找到圆的面积的逻辑如下: s.areacircle = (float)pi*s.radius*s.radius; 用于计算圆柱体的面积的逻辑如下: s.areacylinder = (float)2*pi*s.radius*…

    2025年12月17日
    000
  • C程序打印所有ASCII值

    问题 打印 0 到 255 个字符的美国信息交换标准代码 (ASCII) 值,而不将字符初始化为整数类型变量。只需使用格式说明符即可。 解决方案 这里我们编写一个程序,仅打印 65 到 122。 如果您想查看所有 ASCII值,在 for 循环中你可以写如下 – For(i=0;i&lt…

    2025年12月17日
    000
  • 在C程序中,将一个数组中具有最大AND值的一对元素打印出来

    根据问题,我们给定了一个包含n个正整数的数组,我们需要从数组中找到具有最大AND值的一对。 示例 Input: arr[] = { 4, 8, 12, 16 }Output: pair = 8 12The maximum and value= 8Input:arr[] = { 4, 8, 16, 2…

    2025年12月17日
    000
  • C程序用于矩阵相减

    给定两个矩阵 mat1[行][列] 和 mat2[行][列],我们必须找到两个矩阵之间的差异并打印两个矩阵相减后获得的结果。两个矩阵相减为 mat1[n][m] – mat2[n][m]。 对于减法,两个矩阵的行数和列数应该相同。 示例 Input:MAT1[N][N] = { {1, 2, 3},…

    2025年12月17日
    000
  • 获取给定数字的大小的C++程序

    给定数字的大小意味着该特定数字之间的差异和零。它还可以表示一个数学对象相对于该数学对象中其他对象的大小同种。我们将遵循这里的第一个定义,以及大小或绝对值数字的表示为 |x|,其中 x 是实数。我们探索展示的方式给定实数的绝对值或大小。 朴素方法 我们可以自己编写一个程序来找出给定实数的大小。这下面解…

    2025年12月17日
    000
  • C程序计算3D空间中三个点之间的距离

    给定一个三维平面,因此有三个坐标,任务是找到给定点之间的距离并显示结果。 在三维平面上,有三个坐标轴,x轴的坐标为(x1,y1,z1),y轴的坐标为(x2,y2,z2),z轴的坐标为(x3,y3,z)。计算它们之间的距离有一个直接的公式如下所示 $$sqrt{lgroup x2-x1rgroup^{…

    2025年12月17日
    000
  • 编写一个C程序,将大写字母转换为小写字母,不使用字符串转换函数

    在了解如何在不使用字符串转换函数的情况下将大写字母转换为小写字母之前,让我们来看一下使用转换函数将大写字母转换为小写字母的程序,然后您将清楚我们在程序中所做的事情: 示例 #include #include int main(){ char string[50]; printf(“enter a s…

    2025年12月17日
    000
  • 将以下内容翻译为中文:在C程序中打印1/n的前k位小数,其中n是一个正整数

    输入数字 N,这样 1/N 将返回以十进制指定的形式生成的输出,直到达到限制。 使用浮点数很容易,但挑战在于不使用它们。 输入 − n=5 k=5 输出 − 20000 这意味着如果 n=5 且 k= 5 除以 1/5 后的输出应显示至小数点后 5 位。 算法 StartStep 1 -> D…

    2025年12月17日
    000
  • C++程序用于通过键更新字典的值

    许多计算机语言都提供字典,这是一种数据结构。字典是一种更快的数据结构,它基于键和值存储数据。它保留了键值组合,以便键可以几乎实时地轻松搜索某些组件。 C++ STL 语言标准包括类似字典的数据结构。术语“map”用于描述这种数据结构。该映射创建一对任意类型的键和值(由于我们使用的是 C++,因此必须…

    2025年12月17日
    000
  • 在C程序中,使用二分查找算法来搜索有理数,而不使用浮点数算术

    在这个问题中,我们得到了一个有理数的排序数组。我们必须使用二分搜索算法来搜索该有理数数组的给定元素,而不使用浮点运算。 有理数是以 p/q 形式表示的数字,其中p 和 q 都是整数。例如,⅔、⅕。 二分搜索是一种搜索技术,通过查找数组的中间来查找元素。 用于查找使用二分法搜索有理数排序数组中的元素,…

    2025年12月17日
    000
  • 寻找二次方程的根的C程序

    In this tutorial, we will be discussing a program to find the roots of the Quadratic equation. Given a quadratic equation of the form ax2 + bx + c. Ou…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信