IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 基数排序(桶排序) -> 正文阅读

[数据结构与算法]基数排序(桶排序)

桶排序


博主是一个大一刚刚放暑假的大学生,大学我们只学习了c语言,现在这么卷只学c语言肯定不够,所以博主打算从零开始恶补c++顺便写文章记录一下,另外博主这个暑假还想记录一些算法基础内容欢迎关注哦。这些是是一些算法的记录和整理总结笔记要是什么时候忘记了这个算法那个算法怎么做就重新来看看,在csdn上面发是为了利用网址来编写思维导图的话比! 较方便~~~如果大家想跟着我一起学习也可以关注我~或者给这个文章点赞~~~谢谢大家了~



前言:

我们之前学过的排序都是基于比较的排序但桶排序是一个不基于比较的排序
**不基于比较的排序:**无法通过比较来判断大小要根据数据状况定制的是一类很小众的算法


基数排序(桶排序)思路:

1.看最大的有几位,把数组的数补成相同的位数
2.准备几个桶(把所有要出现的数字都当做桶)
3.从个位开始把每位数字放进桶里
4.把桶从左向右把所有的数字都倒出来(先进桶的先出桶)
5.十位数字重复3.4步。
6.百位数字重复3.4步。
7.最后全部重复完了就可以发现数字神奇的排好了!!!
因为我们是从个位开始排的一直到最高位所以数字可以从低到高排序
注意如果是桶排序的话必须有进制


桶排序代码:

解析都在代码里哦!一看就懂,这里的重点是运用了一个分片的思想

#include<iostream>
#include<math.h>
using namespace std;
//桶排序
int getdigit (int x, int d);
int getdigit (int x, int d){

    return ((x /((int) pow(10, d - 1))) % 10);//利用数学方法求位上的数
}
void radixsort (int* a, int L, int R, int digit);
void radixsort (int* a , int L, int R, int digit){//L.R表示一个范围digit表示最大的值有几个十进制位
    const int radix = 10;
    int i = 0, j = 0;
    //准备多少桶
    int b1[R - L + 1];
    for (int d = 1; d <= digit; d++ ){//需要发生多少次入桶出桶, d代表位数
        int count1[radix] = {0};//创造一个词频数组

        for (i = L; i <= R; i++)
            {
                j = getdigit(a[i], d);//调用函数获得这个位置上的数
                count1[j]++;//统计词频
            }
        for (i = 1; i < radix; i++)
        {
            count1[i]= count1[i] + count1[i - 1];

        } //分片

        j = 0;
        for (i = R; i >= L; i--)//从右向左遍历就是后入桶的先出来
        {
            j = getdigit(a[i], d);//看看这个数是什么看看词频
            b1[count1[j] - 1] = a[i];//词频-1就是他在这个片上的应该的位置
            count1[j]--;//这个片上有一个归位了那么剩余的就要减1
        }
        j = 0;
        for(i = L; i <= R; i++){
           a[i] = b1[j];把辅助数组里面存的数据给我们的数组
            j++;
        }
    }
}

int maxbits (int* a, int arr_len);//求最大位数
int maxbits (int* a, int arr_len)
{
    int max=a[0];
    for( int i = 1; i < arr_len; i++)
    {
        if(a[i] > max)
        {
            max = a[i];
        }
    }
    int con = 0;
    while(max != 0)
    {
        max /= 10;
        con ++;
    }
    return con;
}

int main()
{
    int n;
    cin >> n;
    int a[n];
    for (int i = 0;i < n; i++) {
        cin >> a[i];
    }
    radixsort(a, 0, n-1, maxbits(a, n));
     for (int i = 0;i < n; i++) {
        cout << a[i] << ' ';
    }


}


在这里插入图片描述


热爱可抵岁月漫长

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:09:52  更:2022-07-20 19:13:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:15:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码