C++常用排序算法-1-桶排序

本文介绍了如何使用桶排序算法对整数进行排序,利用内存的连续性和地址特性,实现时间复杂度为O(N)的排序方法,并展示了C++代码实例,包括去重功能。
摘要由CSDN通过智能技术生成

前言

在现实中,我们可能会对各种事物进行排序,例如,成绩呀,质量呀之类的,这件事情计算机同样也可以完成,一起来看看吧

例题

(本题为自创,不涉及版权问题)
给定一串数量不大于500个的整数,ai不大于1000,从小到大排序
输入n,和n个数
输出从小到大排序好的数
样例
输入:

5
1 3 5 70 2

输出

1 2 3 5 70

解决这道题大家看过我博客的可能第一时间就会想到sort,只需要sort(a,a+n)就可以解决问题,有不明白,看我博客:sort详解
今天我们就来学点不一样的:桶排序
他的空间时间复杂度都是O(N),所以会随着数值变大而变慢

桶排序,就是把数据装进一个个“桶”来进行排序,这句话说着很别扭,但实现起来却很简单,一起来看一看

tong[a[i]]++;

没错,就是把数值看作是列表指针,只要将对应的内存地址++就可以了,说白了,就是不用你动手,应用计算机的特性(内存的连续性,内存地址)来进行排序。这部分大家可能不懂,不懂的在评论就可以了。

桶排序还有:去重,计数等作用,只要牢记以上的“桶”思想,就可以很方便的进行排序
下面,我们将桶排序带入例题

#include<bits/stdc++.h>
using namespace std;
int n,a[1005];
int main(){
cin>>n;
for(int i=0;i<n;i++){
int temp;
cin>>temp;//临时存放
a[temp]++;

}
for(int i=0;i<=1000;i++){
    for(int j=1;j<=a[i];j++){//避免有重复数据不输出
    cout<<i<<' ';


    }
}
return 0;
}
}

解决了,如果要增加去重
可以把里层循环去掉

谢谢大家,下次见,如果还想让我讲什么排序算法,欢迎评论!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值