• 木桶排序


    木桶排序(箱排序)就是将数组中的数分到有限个木桶中去。木桶排序的必要步骤是计数,记录每一个数出现的次数。

    原理图展示:

     我们先假设待排数组是a,数组长度为n,max代表数组中最大的数所在的范围,即[ 0,max)。木桶数组为buceks。

    看上面的图,我们可以看到,在循环的时候,buckes[a[ i ]]++。这样就统计了每个数在a数组中出现的次数,并记录在了木桶数组中的相应位置。

    我们计数之后,就要进行排序,排序我们就只需要遍历木桶数组,只要木桶数组的元素不为0,那么就代表这个数出现过。并且木桶数组的下标就是就是这个数,

    木桶数组对应下标的值就是这个元素出现的次数。

    代码:

    #include<iostream>
    #include<cstring>
    using namespace std;
    void bucket_sort(int a[],int n,int max)//a代表待排数组,n代表数组的最大长度,max代表数组中的最大值所在的范围。 
    {
        int i=0,j=0;
        int buckets[max];//木桶数组 
        memset(buckets,0,sizeof(buckets));//将木桶数组中的每一个元素初始化为0,方便计数。 
        for(int i=0;i<n;i++)
              buckets[a[i]]++;//统计每个元素在在数组a中出现的次数 
        for(i=0;i<max;i++)
        {
            while(buckets[i]!=0)//排序 
            {
                a[j]=i;
                j++; 
                buckets[i]--;
            }
        }
     } 
    int main()
    {
        int n;
        cin>>n;
        int A[n];
        int max=0;
        for(int i=0;i<n;i++)
        {
            cin>>A[i];
            if(A[i]>max) max=A[i];
        }
        bucket_sort(A,n,max+1);
        for(int i=0;i<n;i++)
          cout<<A[i]<<" ";
          return 0;
    }
  • 相关阅读:
    烂笔头@WP 的博文仅供自己学习的备忘录
    工具---搜索
    ubuntu---安装teamviewer和向日葵
    Ubuntu---标注工具 XXX-labelImg
    ubuntu---深度学习标注工具CasiaLabeler
    ubuntu---kazam安装
    ubuntu---notepadqq安装
    ubuntu---TeamViewer安装
    ubuntu---鼠标的乌龙事件
    ubuntu---终端下不显示 中文文字 的解决方法
  • 原文地址:https://www.cnblogs.com/zhoubo123/p/11585475.html
Copyright © 2020-2023  润新知