欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

桶排序

程序员文章站 2022-05-12 17:09:04
...

1、实现原理

之前所有的排序都是基于比较的方法,时间复杂度最低限制在O(n*logn)。
但是桶排序不是基于比较的排序,其排序与数的个数无关。
但是也存在瓶颈,就是数据本身特性(位数和范围)
原理:(类似于计数排序)
1、需要额外的空间辅助,创建一个数组中最大值+1的bucket容器
2、bucket放置原数组中相应值的统计个数
3、遍历bucket,将bucket每个位置上的数填回原数组

2、代码
时间复杂度:O(n)
额外空间复杂度:O(n)
稳定

#include<bits/stdc++.h>
using namespace std;

void BucketSort(int a[],int n)
{
    int maxn = 0;
    for(int i = 0; i < n; ++i){
        maxn = max(a[i],maxn);
    }

    int bucket[maxn+1] = {0};

    for(int i = 0; i < n; ++i)
    {
        bucket[a[i]]++;
    }

    int i = 0;
    for(int j = 0; j < maxn+1; ++j)
    {
        while(bucket[j]-- > 0)
        {
            a[i++] = j;
        }
    }
}

int main(){

    int a[5] = {0,9,5,8,3};
    BucketSort(a,5);
    printf("%d",a[0]);
	for(int i = 1; i < 5; i++)
	{
		printf(" %d",a[i]);
	}
    return 0;
}