计数排序的C++实现

来源:互联网 发布:mac html5开发工具 编辑:程序博客网 时间:2024/06/06 04:34


//-------------------------------------------------------------------------------------------函数申明

#pragma once



//A待排序数组、iLength数组长度,iMax数组的最大值

void CountingSort(int A[], int iLength, int iMax);

//-------------------------------------------------------------------------------------------函数申明


//-------------------------------------------------------------------------------------------函数实现

#include "CountingSort.h"



#include <iostream>
#include <string>
using namespace std;
void CountingSort(int A[], int iLength, int iMax)
{
    //用于统计的数组和用于存储排序结果的数组
    int* pCount = new int[iMax];
    int* pB = new int[iLength];

    memset(pCount, 0, sizeof(int) * iMax);
    memset(pB, 0, sizeof(int) * iLength);

    //某个数出现一次,则计数它的数组相应增加一。
    for ( int i = 0; i < iLength; i++)
    {
        int iValue = A[i];
        pCount[iValue] += 1;
    }

    //pCount[i]中包含了小于等于i的元素个数。
    for ( int i = 1; i < iMax; i++)
    {
        pCount[i] += pCount[i - 1];
    }

    for (int i = iLength - 1; i >= 0; i--)
    {
        int iValue = A[i];//值
        int iIndex = pCount[iValue];//该值在序列中排多少号。
        pB[iIndex - 1] = A[i];

        pCount[iValue] = pCount[iValue] - 1;
    }

    memcpy(A, pB, sizeof(int) * iLength);

    delete[] pB;
    delete[] pCount;
}

//-------------------------------------------------------------------------------------------函数实现


//-------------------------------------------------------------------------------------------测试程序

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include "CountingSort.h"
using namespace  std;

int _tmain(int argc, _TCHAR* argv[])
{
    srand(int(time(NULL)));
    int A[20];
    int iNow = 0;

    for ( int i = 0; i < 20;i++ )
    {

        int iValue = ((int)rand())%1000;

        A[i] = iValue;
        cout << A[i] << ",";    
        
    }
    cout << " After   Sort :"<<endl;
    CountingSort(A, 20, 1000);

    for ( int i = 0; i < 20; i++)
    {
        cout << A[i] << ",";
    }
    return 0;
}


原创粉丝点击