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;
    }

  • 相关阅读:
    ADB常用命令
    Java内部开发框架
    Android开发的十个建议
    通过浏览器访问网站的过程
    CDN的概念和解决的问题
    nginx实现range请求
    Nginx如何重新编译添加模块
    MP4文件在线播放首屏慢的问题
    Ubuntu下添加程序到应用程序
    一致性hash
  • 原文地址:https://www.cnblogs.com/dlutxm/p/3034344.html
Copyright © 2011-2022 走看看