1. 程式人生 > >資料結構例程——簡單的計數排序

資料結構例程——簡單的計數排序

#include <stdio.h>
#include <malloc.h>
#define MaxSize 20
#define MaxNum 100
typedef int KeyType;    //定義關鍵字型別
typedef char InfoType[10];
typedef struct          //記錄型別
{
    KeyType key;        //關鍵字項
    InfoType data;      //其他資料項,型別為InfoType
} RecType;          //排序的記錄型別定義

void CountSort(RecType R[],int
n) { int i, j, k; int C[MaxNum+1] = {0}; /*用於計數的C陣列的所有元素初值為0*/ for(i=0; i<n; i++) C[R[i].key]++; /*例如,R[i].key為6時,C[6]++,C[R[i].key]是R[i].key出現的次數*/ k=0; for(j=0; j<=MaxNum; j++) /*考察每一個j*/ for(i=1; i<=C[j]; i++) /*j=R[j].key出現過C[j]個,此即是排序的結果*/ R[k++].key=j; } int
main() { int i,n=10; RecType R[MaxSize]; KeyType a[]= {6,1,12,6,18,1,18,7,0,6}; for (i=0; i<n; i++) R[i].key=a[i]; printf("排序前:"); for (i=0; i<n; i++) printf("%d ",R[i].key); printf("\n"); CountSort(R,n); printf("排序後:"); for (i=0; i<n; i++) printf
("%d ",R[i].key); printf("\n"); return 0; }