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

    #include<stdio.h>

    /*第一种形式实现计数排序计数排序后的顺序为从小到大arr[0...len-1]为待排数组,每个元素均是0-k中的一个值brr[0...len-1]为排序后的输出数组crr[0...k]保存0...k中每个值在数组arr中出现的次数*/

    void Count_Sort(int *arr,int *brr,int *crr,int len,int k)
    {
            int i,j=0;
            //数组crr各元素置0
            for(i=0;i<=k;i++)
                crr[i] = 0;
                //统计数组arr中每个元素重复出现的个数
            for(i=0;i<len;i++)
                crr[arr[i]]++;
                //求数组arr中小于等于i的元素个数
            for(i=1;i<=k;i++)
                crr[i] += crr[i-1];
                //把arr中的元素放在brr中对应的位置上
            for(i=len-1;i>=0;i--)
            {
                brr[crr[arr[i]]-1] = arr[i];
                //如果有相同的元素,则放在下一个位置上
                crr[arr[i]]--;
             }
    }

    /*第二种形式实现计数排序计数排序后的顺序为从小到大arr[0...len-1]为待排数组,每个元素均是0-k中的一个值crr[0...k]保存0...k中每个值在数组arr中出现的次数*/

    void Count_Sort(int *arr,int *crr,int len,int k)
    {
            int i,j=0;
            //数组crr各元素置0
            for(i=0;i<=k;i++)
                crr[i] = 0;
                //统计数组arr中每个元素重复出现的个数
            for(i=0;i<len;i++)
                crr[arr[i]]++;
                //根据crr[i]的大小,将元素i放入arr适当的位置
            for(i=0;i<=k;i++)
                while((crr[i]--)>0)
                {
                      arr[j++] = i;
                }
    }

    int main()
    {
           int i;
           //待排序数组,每个元素均在0-8之间
           int arr[] = {2,1,3,8,6,0};
           int brr[6];
           int crr[9];
           Count_Sort(arr,brr,crr,6,8);
           printf("计数排序后的结果为:");
           for(i=0;i<6;i++)
           printf("%d ",brr[i]);
           printf(" ");
           return 0;
    }

  • 相关阅读:
    JS随笔
    tp5 redis 单例模式 转载
    分享我编程工作经历及对软件开发前景的看法
    redis详解(一)-- 概述
    redis详解(二)-- 数据类型详解
    redis详解(四)-- 高可用分布式集群
    redis详解(三)
    新工科平台
    关于Nginx的负载均衡
    微信退款回调
  • 原文地址:https://www.cnblogs.com/wwhai/p/10284860.html
Copyright © 2011-2022 走看看