最も速いアルゴリズムで再帰する必要はありません!運行時間はリニアです!


カウントアルゴリズムについて説明します.
このアルゴリズムの実行時間は線形です!これはとても珍しいですね.したがって、最も速いアルゴリズムの列に帰すべきであり、再帰が使用されていないため、システムのリソース占有も大きくないが、元のアドレスソートに属していないが、安定しているという欠点がある.すなわち、出力順序は入力順序に厳格に従い、同じ要素であっても!基数ソートでよく使用されます.以下の内容は「アルゴリズム導論」のカウント順から抜粋した基本思想である.
各入力要素xについて、xより小さい要素の個数を決定する.この情報を利用すると,xを出力配列中の位置に直接置くことができる.例えば、17個の要素がxより小さい場合、xは18番目の出力位置にあるべきである.いくつかの要素が同時に存在する場合、このスキームは依然として成立する.
次に、C言語バージョンの例を示します.
/*
      M             ,
N           
      :                  
     ,   14     ,         
  15   ,               
*/

#include "stdio.h"
#include "conio.h"
#include "string.h"
#define M  8
#define N  10
/*    ,    :n ,          ,       
            ,        
k              */
void count_sort(int A[],int B[])
{
   int c[M+1];
   int i=0;
   for(i=0;i<=M;i++) /*   c[]      0*/
   {
      c[i]=0;
   }
   for(i=0;i<N;i++)
   {
      c[A[i]]=c[A[i]]+1;
   }
   for(i=1;i<=M;i++) /*               i  */
      c[i]=c[i]+c[i-1];
   for(i=N-1;i>=0;i--)
   {
      B[c[A[i]]]=A[i];
      c[A[i]]--;
   }
}
main()
{
    int a[N]={2,5,4,3,0,2,8,1,6,7},b[N+1],i;
    count_sort(a,b);
    printf("              
"); for(i=1;i<=N;i++) /*0 !*/ printf(" %d ",b[i]); getch(); }