zoukankan      html  css  js  c++  java
  • 线性排序算法

     1. 计数排序

    已知输入数组input[0...n-1],  任意 x IN input[], 如果已知有C[x]个数 <= x,那么 x 应该放在第 C[x] 个位置

    例如:10个5岁以下的小朋友按照年龄排序,如果知道 <= 3岁的小朋友有6个,那么年龄为3岁的小朋友应该站在第6个位置。 

     1 #define MAX     10
     2 #define key(x)  x
     3 int C[MAX];
     4 
     5 void counting_sort(int input[], int output[], int n, int k)
     6 {
     7     int i, j;
     8 
     9     for (j = 0; j < n; j++)
    10         C[key(input[j])]++;
    11     
    12     for (i = 1; i < k; i++)
    13         C[i] = C[i] + C[i - 1]; 
    14 
    15     for (j = n - 1; j >= 0; j--)
    16     {   
    17         output[C[key(input[j])] - 1] = input[j];
    18         C[key(input[j])]--;
    19     }   
    20 }

    优点:

    1、稳定排序

    2、时间复杂度O(n)

    缺点:

    待排序数组元素介于[0, k]之间,当k很大时需要占用大量空间,限制了计数排序的使用范围。

  • 相关阅读:
    迭代器与生成器
    函数
    Java多线程
    JVM垃圾回收
    JVM内存模型
    面向对象的特征和原则
    Java代码规范
    安装yum
    虚机ping:www.baidu.com报错
    创建好centos7虚拟机之后连xshell连不上虚机
  • 原文地址:https://www.cnblogs.com/ym65536/p/4299897.html
Copyright © 2011-2022 走看看