美文网首页
C语言——计数排序

C语言——计数排序

作者: 薛定谔与猫的故事 | 来源:发表于2018-04-18 16:23 被阅读0次
  • 待排序的数组A
  • 从数组中取出最大值k
  • 新建一个数组B,用于存储排序的输出
  • 新建一个数组C,C.length = k+1,用于临时存储空间

原理
如果A中出现数m的次数为n,则C[m] = n,在依据C对A输出到B中。

实现



/****************************************************************
 *                              计数排序
 ****************************************************************/


/****************************************************************
 * function     : getMaxIndex
 * description  : 获取数组中最大值
 * input        : int A[],int length
 * output       : N/A
 * return value : int
 * author       : HanyoungXue
 * date         : 2018-4-18
 *****************************************************************/


int getMax(int A[],int length){
    int max = A[0];

    for (int i = 1; i < length; i++) {
        if (A[i]>max){
            max = A[i];
        }
    }
    return max;
}


/*****************************************************************
 * function     : countingSort
 * description  : 计数排序
 * input        : int A[],int B[],int k,int length
 * output       : int B[]
 * return value : N/A
 * author       : HanyoungXue
 * date         : 2018-4-18
 ******************************************************************/

void countingSort(int A[],int B[],int k,int length){
    int C[k+1];
    for (int i = 0; i < k+1; ++i) {
        C[i] = 0;
    }

    for (int j = 0; j < length; ++j) {
        C[A[j]]+=1;
    }

    for (int i = 1; i < k+1; ++i) {
        C[i] +=C[i-1];
    }

    for (int j = 0; j < length; ++j) {
        B[--C[A[j]]] = A[j];
    }
}

/**********************************************************
 * function     : print_array
 * description  : 打印一个数组
 * input        : int A[],int length, char *print_string
 * output       : N/A
 * return value : N/A
 * author       : HanyoungXue
 * date         : 2018-4-15
 ***********************************************************/

void print_array(int A[],int length,char *print_string){
    printf("%s\n", print_string);
    for (int i = 0; i < length ; ++i){
        printf("%d\t",A[i]);
    }
    printf("\n");
}



void initARandom(int A[],int length){
    srand(time(NULL));
    for (int i = 0; i < length; ++i) {
        A[i] = rand()%60;
    }
}

int main(int argc, char const *argv[])
{
    int length = 12;
    int A[length];
    /*****************************************
     * 计数排序测试
     *****************************************/

    initARandom(A,length);
    print_array(A,length,"before counting sort:");
    int B[length];
    countingSort(A,B,getMax(A,length),length);
    print_array(B,length,"after counting sort:");


    return 0;
}

相关文章

  • C语言——计数排序

    待排序的数组A 从数组中取出最大值k 新建一个数组B,用于存储排序的输出 新建一个数组C,C.length = k...

  • 有关iOS基础知识总结

    1.C语言 排序算法)(数组的大小排序,字母的先后排序,单词的计数) 2.面向过程和面向对象 面向过程:分析出解决...

  • 常用排序算法总结9一一计数排序

    定义 计数排序(英语:Counting Sort)是一种稳定的线性时间排序算法。计数排序使用一个额外的数组C,其中...

  • C语言:十种排序(八) - 计数排序

    前言 一种将无序数组进行排序的方法。 计数排序,wiki参考:https://zh.wikipedia.org/w...

  • 哈希&计数排序和桶排序&基数排序

    length在大部分语言里是最大的数字下标+1 完整的计数排序 桶排序 桶排序是计数排序的升级版排序,要么浪费时间...

  • 排序算法Java实现

    本文会通过Java语言实现:冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序,希尔排序...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • c语言排序算法

    c语言排序算法

  • 数组-计数排序

    采用计数排序方式对数组进行排序 计数排序百科:计数排序(Counting Sort),计数排序是一个非基于比较的排...

  • 小朋友学数据结构(12):冒泡排序

    咱们在学C语言的时候,学过冒泡排序,请参考《小朋友学C语言(26):冒泡排序》:https://www.jians...

网友评论

      本文标题:C语言——计数排序

      本文链接:https://www.haomeiwen.com/subject/wazvkftx.html