zoukankan      html  css  js  c++  java
  • 计数排序

    算法思想

    编辑
    计数排序对输入的数据有附加的限制条件:
    1、输入的线性表的元素属于有限偏序集S;
    2、设输入的线性表的长度为n,|S|=k(表示集合S中元素的总数目为k),则k=O(n)。
    在这两个条件下,计数排序的复杂性为O(n)。
    计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定)。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。例如,如果输入序列中只有17个元素的值小于x的值,则x可以直接存放在输出序列的第18个位置上。当然,如果有多个元素具有相同的值时,我们不能将这些元素放在输出序列的同一个位置上,因此,上述方案还要作适当的修改。
     
     1 #include <iostream>
     2 using namespace std;
     3 const int k=1000; // range
     4 int a[1000],c[1000],ranked[1000];
     5 int maxn=-1;
     6 int main() 
     7 {
     8     
     9     int n;
    10     cin>>n;
    11     for (int i=0;i<n;i++) 
    12     {
    13         cin>>a[i]; 
    14         c[a[i]]++;
    15         if(a[i]>maxn)
    16         maxn=a[i];
    17     }
    18     for (int i=1;i<=maxn;i++)
    19         c[i]=c[i-1]+c[i];
    20     for (int i=0;i<=n-1;i++)
    21     {
    22         ranked[--c[a[i]]]=a[i];//--是为了方便输出相同的数 
    23        
    24     for (int i=0;i<n;i++)
    25         cout<<ranked[i]<<endl;
    26     return 0;
    27 }
  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6589026.html
Copyright © 2011-2022 走看看