1.桶排序
有N个整数,范围是1-M或者是0-M-1。留置一个数组Count,其大小为M,并初始化为0。于是Count有M个单元(或者叫桶)。当Ai被读入时,Count[Ai]增1。当所有的输入被读入,扫描Count,打印输出排序号的列表。
桶排序实现代码如下:
#include <stdio.h>
#define Max 10
void initArray(int arr[], int len)
{
int k;
for(k = 0; k < len; k++)
{
arr[k] = 0;
}
}
void PrintBucketArray(int BucketArr[], int len)
{
int j;
for(j = 0; j < len; j++)
{
int tmp = BucketArr[j];
while((tmp--) > 0)
{
printf("%d\n",j);
}
}
}
/************************************************
*桶排序,输入数组中的数不超过在0-Max-1之间
*
************************************************/
void BucketSort(int input[], int la, int output[], int lb)
{
initArray(output,lb);
int i;
for(i = 0; i < la; i++)
{
output[input[i]]++;
}
PrintBucketArray(output,lb);
}
int main(void)
{
int a[10] = {9,8,8,5,1,3,3,3,2,2};
int b[Max];
BucketSort(a,10,b,Max);
return 0;
}
2.基数排序
基数排序是桶排序的推广:N个数位于0-NP-1之间(P是某个常数)。这种情况下就不适合使用桶排序了一次性搞定。既然不能一次搞定,可以考虑分步骤多次处理。基数排序的思路:每一趟对待排序的数的最低有效位进行桶排序。也就是说,先对每个数按照最低位进行桶排序,然后按照次低位桶排序……
举例是最好的说明。现在有10个数:64、8、216、512、27、729、0、1、343、125。10个数,都落在0-999(10^3-1)之间。
先按照最低位排序得到结果如下:
0 |
1 |
512 |
343 |
64 |
125 |
216 |
27 |
8 |
729 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
然后按照次低位排序,结果得到:
08 01 00 |
216
512
|
729
27
125
|
|
343 |
|
64 |
|
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
接着按照倒数第三位排序,结果:
064 027 008 001 000 |
125
|
216 |
343 |
|
512 |
|
729 |
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
基数排序代码之后再补上。
分享到:
相关推荐
1. **排序算法**:排序是数据处理的核心操作之一,常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序、希尔排序、计数排序、桶排序和基数排序等。每个算法都有其独特的思想和适用场景,如...
数据结构与排序算法是计算机科学中的基础且至关重要的部分,它们在编程和软件开发中扮演着核心角色。这里,我们有七个不同的排序算法通过SWF文件进行直观的演示,包括堆排序、归并排序、基数排序、快速排序、冒泡...
"排序"是计算机科学中的重要主题,书中可能涵盖了各种排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、计数排序、桶排序和基数排序等。这些排序算法各有优缺点,适用于不同的场景。例如,...
数据结构实验报告主要探讨了两种排序算法——桶式排序和基数排序,以及如何用C语言设计堆栈来实现中缀表达式到后缀表达式的转换。实验中,开发者使用了OS X作为操作系统,VSCode作为集成开发环境,Clang 9.1.0 Apple...
还有一些其他内部排序算法,如希尔排序、计数排序、桶排序、基数排序等,它们各有特点,适用于特定的数据分布和场景。在实际应用中,选择合适的排序算法需要考虑数据规模、数据分布以及对空间和时间效率的要求。 在...
- 基数排序、桶排序等非比较排序算法的原理及适用场景。 #### 四、查找算法 - **顺序查找与二分查找**: - 顺序查找的时间复杂度分析。 - 二分查找的前提条件及实现步骤。 - **哈希表**: - 哈希函数的设计...
讲义可能包含了各种经典的排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序,以及更高效的排序算法如计数排序、桶排序、基数排序等。还会讨论各种算法的时间复杂度和稳定性。 4. **查找算法*...
7. 计数排序、桶排序和基数排序:这些是线性时间复杂度的非比较排序算法,适用于特定类型的数据,例如整数或范围有限的值。 22.sln 是Visual Studio解决方案文件,包含了项目配置和依赖关系。StdAfx.cpp 和 StdAfx....
用flash方式演示各种数据结构基础算法3——排序部分,很直观,合适基础学习者使用。里面包括:堆排序.swf,规并排序.swf,基数排序.swf,快速排序.swf,冒泡排序.swf,桶式排序法.swf,希尔排序.swf,直接插入排序....
在本单元中,我们将深入探讨数据结构的一个关键部分——内排序,即数据在内存中进行排序的方法。内排序是计算机程序设计中的一项基本技能,尤其是在处理大量数据时,快速而有效地排序可以显著提升效率。 内排序算法...
在本文中,我们将探讨两种不同的排序算法——基数排序和二路归并排序,它们都是数据结构与算法领域的重要组成部分,尤其在面试准备中显得尤为重要。 首先,我们来看基数排序。基数排序是一种非比较型的排序算法,它...
3. **堆排序**:堆排序利用了数据结构——堆(一种特殊的完全二叉树)的特性。首先构建一个大顶堆或小顶堆,然后交换堆顶元素与末尾元素,将末尾元素移除,重复这个过程直到所有元素都有序。堆排序的平均和最坏情况...
- **桶排序与基数排序**:介绍两种非比较型排序算法——桶排序和基数排序。 - **MD5散列算法**:讲解MD5散列算法的原理及其安全性。 - **哈希表在编程语言中的应用**:分析哈希表在现代编程语言中的实现及其作用。 ...
- 特殊排序算法:基数排序、桶排序、计数排序,适用于特定类型的数据。 4. 图论算法: - 最小生成树算法:Prim算法和Kruskal算法,用于构建连接所有顶点的最小权重边集。 - 拓扑排序:在有向无环图(DAG)中,确定...
本报告将重点讨论一种常见的数据结构应用——关键字排序,特别是基数排序及其变种LSD(Least Significant Digit)排序。在课程设计中,这类排序算法的理解与实现是提升编程能力的重要环节。 首先,我们来了解一下...
### Java基础数据结构—排序算法 #### 排序的重要性与应用场景 排序算法是计算机科学中的一个核心主题,它不仅在理论研究中占有重要的地位,也是实际应用中不可或缺的一部分。无论是在数据库管理系统的查询优化,...
数据结构在IT领域中扮演着至关重要的角色,它是一门研究如何高效地组织和存储数据的学科。在本文中,我们将深入探讨一种基础且实用的数据处理技术——排序。排序是将一组无序的数据元素按照特定的规则(如升序或降序...
1. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,以及更高效的计数排序、桶排序和基数排序。 2. **查找算法**:如线性查找、二分查找、哈希查找等。 3. **动态规划**:解决...
- **基数排序**(Radix Sort)、**计数排序**(Counting Sort)、**桶排序**(Bucket Sort)等特殊用途的排序算法。 ### 5. 图算法 图算法是处理图数据结构的一系列算法,包括图的遍历、最短路径、最小生成树等...