8 条题解

  • 2
    @ 2023-7-22 15:37:21

    解析

    计数排序的原理就是把所有的数按照数值进行归类,再按照顺序依次把归类好的数输出,其中要注意的是cnt数组长度需要定义为输入数据的最大值。

    题解

    #include <iostream>
    using namespace std;
    int main()
    {
        // 定义,输入
        int a[50005];
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        // 排序_start
        int cnt[1005]; // 计数,cnt[i]是i出现的次数
        // 清零
        for (int i = 1; i <= 1000; i++)
            cnt[i] = 0;
        // 计数
        for (int i = 1; i <= n; i++)
            cnt[a[i]]++; // 当前的数(a[i])出现的次数(cnt[a[i]])加1
        // 排序_end
        // 输出_start
        for (int i = 1; i <= 1000; i++)
        {
            while (cnt[i] > 0)
            { // 当前的数(i)的个数(cnt[i])还有的话
                cout << i << " ";
                cnt[i]--; // 输出了一个i,cnt[i]少一个
            }
        }
        // 输出_end
        return 0;
    }
    
    
    • 1
      @ 2023-7-23 22:15:29

      yasuo流,我还想问问,谁没复制了核桃或题解👀️

      #include <iostream>
      int main(){
          int q,z,a[1001]={0};std::cin>>q;
          for(int i=1;i<=q;i++){std::cin>>z;a[z]++;}
          for(int i=1;i<=1000;i++)for(int j=1;j<=a[i];j++)std::cout<<i<<" ";
          return 0;}
      
      • 0
        @ 2024-4-21 21:17:25
        #include<iostream>
        using namespace std;
        long long t[1005],n,x;
        int main()
        {
            cin >> n;
            for(int i=1;i<=n;i++)//输入
            {
                cin >> x;
                t[x]++;//标记下标
            }
            for(int i=1;i<1005;i++)
            {
                for(int j=1;j<=t[i];j++)//如果标记过,重复t[i]次输出i
                {
                    cout << i << " ";
                }
            }
            return 0;
        }
        
        • 0
          @ 2023-8-6 11:30:01
          #include<bits/stdc++.h>
          int main()
          {
              long long a[100005], n;
              std::cin >> n;
              for(int i = 1; i <= n; i++) std::cin >> a[i];
              std::sort(a+1,a+1+n);
              for(int i = 1; i <= n; i++) std::cout << a[i] << " " ;
              return 0;
          }
          
          • 0
            @ 2023-8-2 16:00:33

            分享另一种思路

            #include<bits/stdc++.h>
            using namespace std;
            int main()
            {
                long long n;
                long long a[100005];//本题解需要long long类型
                cin>>n;
                for (int i=1;i<=n;i++)
                {
                    cin>>a[i];
                }
                sort (a+1,a+n+1);
                for (int i=1;i<=n;i++)
                {
                    cout<<a[i]<<" ";
                }
                return 0;
            }
            
            • 0
              @ 2023-7-26 10:01:42
              #include <bits/stdc++.h>
              using namespace std;
              int main()
              {
                  int n, x, num[5000005];
                  cin >> n;
                  //计数排序
                  for (int i = 1; i <= n; i++)
                  {
                      cin >> x;//输入
                      num[x]++;//计数
                  }
                  for (int i = 1; i <= 1000; i++)
                  {
                      for (int j = 1; j <= num[i]; j++)
                          cout << i << " ";
                  }
                  return 0;
              }
              
              • 0
                @ 2023-7-22 17:14:33

                思路:

                用计数排序对数组进行排序,然后输出

                #include <iostream>
                using namespace std;
                
                int num[50005],cnt[1005];
                
                int main()
                {
                    int n;
                    cin >> n;
                    for(int i = 0;i < n;i++)
                        cin >> num[i];
                    //计数排序
                    for(int i = 0;i < n;i++)
                        cnt[num[i]]++;//在cnt的第num[i]上+1,即num[i]出现的次数+1
                    for(int i = 1;i <= 1000;i++)//因为1 <= 数字 <= 1000,所以循环范围应该是1~1000
                    {
                        for(int j = 1;j <= cnt[i];j++)//循环cnt[i]次(i出现的次数次)
                            //cnt[i]即为i出现的次数,如果cnt[i]为0的话则不会输出,所以不需要去额外判断cnt[i]是否等于0
                            cout << i << ' ';//输出i
                    }
                    return 0;
                }
                
                • @ 2023-7-23 22:17:06

                  你的清零可以简化成

                  a[1001]={0}
                  
              • -1
                @ 2023-7-30 11:27:53
                玩mc的免费抄!玩盗版mc游戏的人,s
                #include <bits/stdc++.h>//打开库
                using namespace std;
                int main()
                {
                    int n, m, cm[10000000];//建造莫名其妙的变量
                    cin >> n;
                    for (int i = 1; i <= n; i++)//整个莫名其妙的循环,呵呵呵呵Y(+v-)Y
                    {
                        cin >> m;
                        cm[m]++;
                    }
                    for (int i = 1; i <= 1000; i++)//懒得说了
                    {
                        for (int j = 1; j <= cm[i]; j++)
                        {
                            cout << i << " ";
                        }
                    }
                    return 0;
                }//拜拜,hihihi😄 😄
                
                • 1

                信息

                ID
                323
                时间
                1000ms
                内存
                256MiB
                难度
                7
                标签
                递交数
                1929
                已通过
                454
                上传者