`

重学数据结构002——桶排序、基数排序

阅读更多

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
4
分享到:
评论

相关推荐

    数据结构课程设计——排序综合课程设计

    1. **排序算法**:排序是数据处理的核心操作之一,常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序、希尔排序、计数排序、桶排序和基数排序等。每个算法都有其独特的思想和适用场景,如...

    数据结构模拟演示过程swf——排序系列(整理出来的,很直观,非常不错!)

    数据结构与排序算法是计算机科学中的基础且至关重要的部分,它们在编程和软件开发中扮演着核心角色。这里,我们有七个不同的排序算法通过SWF文件进行直观的演示,包括堆排序、归并排序、基数排序、快速排序、冒泡...

    算法Ⅰ~Ⅳ(C++实现)——基础、数据结构、排序和搜索(第三版 中英文)

    "排序"是计算机科学中的重要主题,书中可能涵盖了各种排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、计数排序、桶排序和基数排序等。这些排序算法各有优缺点,适用于不同的场景。例如,...

    数据结构实验报告_实验四1

    数据结构实验报告主要探讨了两种排序算法——桶式排序和基数排序,以及如何用C语言设计堆栈来实现中缀表达式到后缀表达式的转换。实验中,开发者使用了OS X作为操作系统,VSCode作为集成开发环境,Clang 9.1.0 Apple...

    <<数据结构>> 内部排序的java实现

    还有一些其他内部排序算法,如希尔排序、计数排序、桶排序、基数排序等,它们各有特点,适用于特定的数据分布和场景。在实际应用中,选择合适的排序算法需要考虑数据规模、数据分布以及对空间和时间效率的要求。 在...

    C++数据结构与算法 (第4版)

    - 基数排序、桶排序等非比较排序算法的原理及适用场景。 #### 四、查找算法 - **顺序查找与二分查找**: - 顺序查找的时间复杂度分析。 - 二分查找的前提条件及实现步骤。 - **哈希表**: - 哈希函数的设计...

    南京大学算法讲义——图伦排序查找

    讲义可能包含了各种经典的排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序,以及更高效的排序算法如计数排序、桶排序、基数排序等。还会讨论各种算法的时间复杂度和稳定性。 4. **查找算法*...

    VC++2012编程演练数据结构《22》排序算法

    7. 计数排序、桶排序和基数排序:这些是线性时间复杂度的非比较排序算法,适用于特定类型的数据,例如整数或范围有限的值。 22.sln 是Visual Studio解决方案文件,包含了项目配置和依赖关系。StdAfx.cpp 和 StdAfx....

    直观图形界面演示数据结构基础算法3【排序部分】

    用flash方式演示各种数据结构基础算法3——排序部分,很直观,合适基础学习者使用。里面包括:堆排序.swf,规并排序.swf,基数排序.swf,快速排序.swf,冒泡排序.swf,桶式排序法.swf,希尔排序.swf,直接插入排序....

    第7单元(内排序).rar_数据结构

    在本单元中,我们将深入探讨数据结构的一个关键部分——内排序,即数据在内存中进行排序的方法。内排序是计算机程序设计中的一项基本技能,尤其是在处理大量数据时,快速而有效地排序可以显著提升效率。 内排序算法...

    数据结构与算法面试准备之排序篇1

    在本文中,我们将探讨两种不同的排序算法——基数排序和二路归并排序,它们都是数据结构与算法领域的重要组成部分,尤其在面试准备中显得尤为重要。 首先,我们来看基数排序。基数排序是一种非比较型的排序算法,它...

    数据结构:第十章_内部排序.ppt

    3. **堆排序**:堆排序利用了数据结构——堆(一种特殊的完全二叉树)的特性。首先构建一个大顶堆或小顶堆,然后交换堆顶元素与末尾元素,将末尾元素移除,重复这个过程直到所有元素都有序。堆排序的平均和最坏情况...

    清华大学邓俊辉数据结构讲义

    - **桶排序与基数排序**:介绍两种非比较型排序算法——桶排序和基数排序。 - **MD5散列算法**:讲解MD5散列算法的原理及其安全性。 - **哈希表在编程语言中的应用**:分析哈希表在现代编程语言中的实现及其作用。 ...

    数据结构与算法分析 java描述

    - 特殊排序算法:基数排序、桶排序、计数排序,适用于特定类型的数据。 4. 图论算法: - 最小生成树算法:Prim算法和Kruskal算法,用于构建连接所有顶点的最小权重边集。 - 拓扑排序:在有向无环图(DAG)中,确定...

    course-design-of-data-structure.zip_Course Design

    本报告将重点讨论一种常见的数据结构应用——关键字排序,特别是基数排序及其变种LSD(Least Significant Digit)排序。在课程设计中,这类排序算法的理解与实现是提升编程能力的重要环节。 首先,我们来了解一下...

    java基础数据结构-排序算法

    ### Java基础数据结构—排序算法 #### 排序的重要性与应用场景 排序算法是计算机科学中的一个核心主题,它不仅在理论研究中占有重要的地位,也是实际应用中不可或缺的一部分。无论是在数据库管理系统的查询优化,...

    数据结构非常有用的非常有用的非常有用的非常有用的

    数据结构在IT领域中扮演着至关重要的角色,它是一门研究如何高效地组织和存储数据的学科。在本文中,我们将深入探讨一种基础且实用的数据处理技术——排序。排序是将一组无序的数据元素按照特定的规则(如升序或降序...

    数据结构与算法c++

    1. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,以及更高效的计数排序、桶排序和基数排序。 2. **查找算法**:如线性查找、二分查找、哈希查找等。 3. **动态规划**:解决...

    数据结构与算法分析 C++语言描述

    - **基数排序**(Radix Sort)、**计数排序**(Counting Sort)、**桶排序**(Bucket Sort)等特殊用途的排序算法。 ### 5. 图算法 图算法是处理图数据结构的一系列算法,包括图的遍历、最短路径、最小生成树等...

Global site tag (gtag.js) - Google Analytics