• 8-2.计数排序


    计数排序的基本思想是:统计一个数序列中小于某个元素a的个数为n,则直接把该元素a放到第n+1个位置上。当然当过有几个元素相同时要做适当的调整,因为不能把所有的元素放到同一个位置上。计数排序假设输入的元素都是0到k之间的整数

    // 8-2.计数排序.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    void CountSort(int a[],int b[],int array_size,int k)
    {
    	int* c=new int[k+1];
    	for (int i=0;i<=k;i++)
    	{
    		c[i]=0;
    	}
    	//c[i] contains the number of elements equal to i
    	for (int i=0;i<array_size;i++)
    	{
    		c[a[i]]++;
    	}
    	//c[i] contains the number of elements less than or equal to i
    	for (int i=1;i<=k;i++)
    	{
    		c[i]=c[i]+c[i-1];
    	}
    	//confirm the num position
    	for (int i=array_size-1;i>=0;i--)
    	{
    		b[c[a[i]]-1]=a[i];
    		c[a[i]]--;
    	}
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int a[8]={2,5,3,0,2,3,0,3};
    	int b[8];
    	CountSort(a,b,8,5);
    	for (int i=0;i<8;i++)
    	{
    		cout<<b[i]<<" ";
    	}
    	cout<<endl;
    	return 0;
    }

    对于数据2 5 3 0 2 3 0 3程序执行的过程如下图所示:

    现在有个问题,若必须是0到n的自然数,是不是用途很小?我想了想,其实可以任意整数的,即找出最小的数来,看看与0的距离d,把所有的数同时减去d,划到0到n的范围内,计数排序。到最后待恢复就可以了。

  • 相关阅读:
    功能点方法
    学数答题160908-数论不等式
    学数答题160903-函数方程
    学数答题160906-不等式最值
    学数答题160905-函数方程
    学数答题160904-不等式
    学数答题160903-三角函数
    kitti-b站教程
    kitti数据集介绍
    SLAM:理论与实践
  • 原文地址:https://www.cnblogs.com/hdk1993/p/4652814.html
Copyright © 2020-2023  润新知