数据结构与算法之计数排序

博客介绍了计数排序的基本思想,即对数组中每个元素按大小排名次,名次为比其小的元素个数加上左边相等元素个数。还给出了数组示例及名次计算结果,并提及名次计算的C++代码和利用名次数组排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     计数排序的基本思想:在一个数组中对每个元素按大小进行排名次,一个元素的名次是数组中比他小的元素的个数加上左边出现的与之相等的元素的个数(备注:这里名次越高说明元素越大)。例如数组a=[5,4,2,5,8,9],新建一个相同大小的数组用于保存数组元素的名次,得到名次数组 R=[2,1,0,3,4,5]。

    名次计算C++代码

template<class T>
void rank(T a[], int n, int r[])
{
  for(int i=0;i<n;i++)
  {
    r[i]=0;
  }
  
 //比较所有元素对
  for(int i=1;i<n;i++)
    for(int j=0;j<i;j++)
      {
       if(a[j]>a[i]) r[j]++;
       else  r[i]++;
      }
  
}

  利用名次数组进行排序

template<class T>
void jishuSort(T a[],int n,int r[])

{
   T *temp = new T[n];
   for(int i=0;i<n;i++)
   {
    temp[r[i]] = a[i];
   }

   for(int i=0;i<n;i++)
   {
    a[i] = temp[i];
   }
   delete [] temp;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值