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

    给定一个超过10万元素,每个元素均不大于1000的数组,怎样对其进行排序?
    这个题目就要多亏了晓东。明显的是这些元素中会有很多重复的元素。计数排序无疑是最佳的方式。

    参考链接:http://www.cppblog.com/shongbee2/archive/2009/04/24/80991.html

    #include <stdio.h>
    #include 
    <stdlib.h>

    //计数排序
    int CountSort(int* pData, int nLen)
    {
        
    int* pCout = NULL;            //保存记数数据的指针
        pCout = (int*)malloc(sizeof(int* nLen);    //申请空间
        
    //初始化记数为0
        for (int i = 0; i < nLen; ++i)
        {
            pCout[i] 
    = 0;
        }

        
    //记录排序记数。在排序的值相应记数加1。
        for (int i = 0; i < nLen; ++i)
        {
            
    ++pCout[pData[i]];        //
        }

        
    //确定不比该位置大的数据个数。
        for (int i = 1; i < nLen; ++i)
        {
            pCout[i] 
    += pCout[i - 1];    //不比他大的数据个数为他的个数加上前一个的记数。
        }

        
    int* pSort = NULL;            //保存排序结果的指针
        pSort = (int*)malloc(sizeof(int* nLen);    //申请空间

        
    for (int i = 0; i < nLen; ++i)
        {
            
    //把数据放在指定位置。因为pCout[pData[i]]的值就是不比他大数据的个数。
            
    //为什么要先减一,因为pCout[pData[i]]保存的是不比他大数据的个数中包括了
            
    //他自己,我的下标是从零开始的!所以要先减一。
            --pCout[pData[i]];    //因为有相同数据的可能,所以要把该位置数据个数减一。
            pSort[pCout[pData[i]]] = pData[i];        
            
        }

        
    //排序结束,复制到原来数组中。
        for (int i = 0; i < nLen; ++i)
        {
            pData[i] 
    = pSort[i];
        }

        
    //最后要注意释放申请的空间。
        free(pCout);
        free(pSort);

        
    return 1;
    }

    int main()
    {
        
    int nData[10= {8,6,3,6,5,8,3,5,1,0};
        CountSort(nData, 
    10);
        
    for (int i = 0; i < 10++i)
        {
            printf(
    "%d ", nData[i]);
        }
        printf(
    "\n");

        system(
    "pause");
        
    return 0;
    }

  • 相关阅读:
    做才是得到
    常用工具汇总
    迎接2017
    新年礼物
    2017
    asp.net core 日志
    板子|无向图的割点
    11/06信竞快乐模拟赛
    动态规划复习
    894D
  • 原文地址:https://www.cnblogs.com/dlutxm/p/3034344.html
Copyright © 2011-2022 走看看