データ構造アルゴリズムの並べ替えシリーズJava、Cソース実装(8)--基数並べ替え


ベースソート
これは前述のアルゴリズムとは全く異なるソート方法である.前述のアルゴリズムはいずれもキーワードの比較を行い,基数ソートは記録キーワード間の比較を必要としない.
チェーンベースソート
思想:低位から高位まで一度にソートのキーを割り当てて収集し、d回の割り当てと収集を経て、秩序あるシーケンスを得ることができる.
1.キーワードが10進整数であれば、個、十、百等位で分解し、基数rd=10、C 0=0、C 9=9、dは最長整数の桁数とする.
2.キーワードが小文字の英字であれば、rd=26、C 0=「a」、C 25=「z」、dは文字列の最大長である.
JAvaコード:
public class RadixSort {
public static void main(String[] args) {
int array[] ={3,22,93,3,5,14,28,65,39,81,71,72,48,39,55,105,129,184,196,208};  
showArray(array);
System.out.println("
"); radixSort(array,array.length); showArray(array); } private static void radixSort(int[] a,int size) { int[][] temp=new int[10][20]; // 10 0~9, 20 a size int[] order=new int[10]; int i,j,k; //k int n; //n=1,10,100,1000... a int p; n=1; while(n <= 100) { for(i=0;i<size;i++) { k = (a[i]/n) % 10; temp[k][order[k]] = a[i]; order[k]++; } p=0; //p ,a for(i=0;i<10;i++) { if(order[i] != 0) { for(j=0;j<order[i];j++) { a[p] = temp[i][j]; p++; } order[i] = 0; } } n *= 10; } } private static void showArray(int[] a) { for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }

cコード:
//基数ソート
#include<stdio.h>  
  
void radixSort(int *a,int size)  
{  
    int temp[10][20]={0}; //   10  0~9,   20  a size  
    int order[10]={0};      
    int i,j,k; //k                  
    int n; //n=1,10,100,1000...   a        
    int p;  
    n=1;      
    while(n <= 100)  
    {  
        for(i=0;i<size;i++)  
        {  
            k = (a[i]/n) % 10;  
            temp[k][order[k]] = a[i];  
            order[k]++;  
        }     
        p=0; //p        ,a     
        for(i=0;i<10;i++)  
        {  
            if(order[i] != 0)  
            {  
                for(j=0;j<order[i];j++)  
                {  
                    a[p] = temp[i][j];  
                    p++;  
                }  
            order[i] = 0;  
            }  
        }     
        n *= 10;  
    }     
}  
  
int main()  
{  
    int a[20]={3,22,93,3,5,14,28,65,39,81,71,72,48,39,55,105,129,184,196,208};   
    int i;  
    radixSort(a,20);  
    for(i=0;i<20;i++)  
        printf("%d  ",a[i]);     
return 0; 
}