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

    算法:

    1、找出待排序的数组中最大和最小的元素

    2、统计数组中每个值为i的元素出现的次数,存入数组C的第i项

    3、对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)

    4、反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1

    01.#include <stdlib.h>  
    02.#include <string.h>  
    03.#include <stdio.h>  
    04./************************************************************** 
    05. 功能:计数排序。 
    06. 参数: data : 要排序的数组 
    07.        size :数组元素的个数 
    08.        k   :数组中元素数组最大值 +1 (这个需要+1) 
    09. 返回值: 成功0;失败-1.        
    10. *************************************************************/  
    11.int ctsort(int *data, int size, int k)  
    12.{  
    13.    int * counts = NULL,/*计数数组*/  
    14.        * temp = NULL;/*保存排序后的数组*/  
    15.    int i = 0;  
    16.    /*申请数组空间*/  
    17.    if ((counts = (int *) malloc( k * sizeof(int))) == NULL)  
    18.        return -1;  
    19.    if ((temp = (int *) malloc( k * sizeof(int))) == NULL)  
    20.        return -1;  
    21.    /*初始化计数数组*/  
    22.    for (i = 0; i < k; i ++)  
    23.        counts[i] = 0;  
    24.    /*数组中出现的元素,及出现次数记录*/  
    25.    for(i = 0; i < size; i++)  
    26.        counts[data[i]] += 1;  
    27.    /*调整元素计数中,加上前一个数*/  
    28.    for (i = 1; i < k; i++)  
    29.        counts[i] += counts[i - 1];  
    30.    /*使用计数数组中的记录数值,来进行排序,排序后保存的temp*/  
    31.    for (i = size -1; i >= 0; i --){  
    32.        temp[counts[data[i]] - 1] = data[i];  
    33.        counts[data[i]] -= 1;  
    34.    }  
    35.      
    36.    memcpy(data,temp,size * sizeof(int));  
    37.    free(counts);  
    38.    free(temp);  
    39.    return 0;  
    40.}  
    41.int main()  
    42.{  
    43.    int a[8] = {2,0,2,1,4,6,7,4};  
    44.    int max = a[0],  
    45.        i = 0;  
    46.    /*获得数组中中的数值*/  
    47.    for ( i = 1; i < 8; i++){  
    48.        if (a[i] > max)  
    49.            max = a[i];  
    50.    }  
    51.    ctsort(a,8,max+1);  
    52.    for (i = 0;i < 8;i ++)  
    53.        printf("%d
    ",a[i]);  
    54.}  
  • 相关阅读:
    javascript阻止子元素继承父元素事件
    UTC 时间转化为北京时间
    uniapp中引入less文件
    HDU 1002 A + B Problem II(大数据)
    FatMouse's Speed(dp)
    Monkey and Banana(dp)
    Piggy-Bank(dp,背包)
    Longest Ordered Subsequence(最长上升子序列,dp)
    我的第一篇博客
    redis优化方案
  • 原文地址:https://www.cnblogs.com/yl-saber/p/6933664.html
Copyright © 2011-2022 走看看