计数排序 C++,指针,函数调用版本

首先我们需要从我们的标题要求看起,计数排序的意思是计数排序是一个非基于比较的排序算法,它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。

排序思路:

  1. 扫描整个集合,并设置一个临时数组,用来存放集合中的数据作为此数组的集合
  2. 临时数组设置空间为集合中最大数+1

我们在来思考一个问题,就是说,我们现在使用的是函数调用版本,那么就代表着我要要把排序好之后的数组传回main函数中去。所以使用到了最头疼的指针。再者,就是函数被调用完成之后,系统为函数开辟的临时空间将会被销毁,那么我们就只能定义一个全局变量或者在原来的集合基础上更改他们的值。假如我们定义一个全局变量的数组,那么我们只能定义一个订定长数组,显然特别不方便。所以我们将会采用后者——在原来的集合基础上更改他们的值。

就产生了以下的代码:

#include <iostream>
using namespace std;

int *sum(int a[],int i){

    int max=a[0];
    for(int j=0;j<i;j++){
        if(a[j]>max){
            max = a[j];//寻找最大值
        }
    }

    int s[max+1];
    for(int j=0;j<max+1;j++){
        s[j] = 0;//给数组初始值
    }

    for(int j=0;j<i;j++){
        s[a[j]] ++;
    }


    int index=0;
    int num[i];
    for(int j=0;j<i;j++){
        num[j] = 0;//给数组初始值
    }

    for(int j=0;j<max+1;j++){
        for(int k=0;k<s[j];k++){
            a[index++] = j;
        }
    }
    return a;
}


int main() {
    int a[]={1,2,2,6,2,3,8,3};
    int *t=sum(a,sizeof(a)/ sizeof(a[0]));//sizeof(a)/ sizeof(a[0])计算数组的长度
    for(int i=0;i<8;i++){
        cout<<t[i]<<" ";
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙小虬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值