桶排序

本文介绍了一种基于计数的排序方法——桶排序。通过使用一个大数组来记录每个数值出现的次数,再遍历该数组来获取有序的输出。这种方法适用于数据范围已知的情况,能够有效地完成排序任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

桶排序

桶排序主要是开辟一个很大的数组, 将其都赋值为0; 其作用为 :
如 : 输入数据 1 , 2 ,4 ,3 , 7, 1;
大数组 a[1] = 2, a[2] = 1, a[3] = 1, a[4] = 1, a[7] = 1;其余全部为0;a[i] = i出现的次数;然后浏览数组, 将不为0 的a[i] 的i 输出, 即实现排序;

假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个”桶”。
在排序时,逐个遍历数组a,将数组a的值,作为”桶数组r”的下标。当a中数据被读取时,就将桶的值加1。例如,读取到数组a[3]=5,则将r[5]的值+1。

主要代码:


const int Max = 100000;
//a[] 保存输入的数据
int *a = new int[N];

//b[] 开辟的大数组,并全部初始为 0;
int *p = new int[Max];
memset(p, 0, Max);

//将a[i]的值使p[i] ++;
for (i = 0; i < n; i++)
        p[a[i]]++;

源代码


#include <stdlib.h>
#include <stdio.h>

const int N = 100;
void Fun1(int a[], int Frist, int Last);
const int Max = 100000;

int main()
{
    int n; 
    scanf("%d", &n);
    int *a = new int[N];
    int i, j; i = 0, j = 0;
    while (i < n)
        scanf("%d", &a[i++]);

    int *p = new int[Max];
    memset(p, 0, Max);
    for (i = 0; i < n; i++)
        p[a[i]]++;

    for (i = 0, j = 0; i < Max; i++)
    {
        while ((p[i]--) > 0)
            a[j++] = i;
    }

    for (i = 0; i < n; i++)
        printf("%d ", a[i]);    

    system("pause");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值