文字列ポインタ配列のソート

文字列のポインタ配列をソートするにはどうしたらいいんだろうと思って実装してみた。

#include <stdio.h>
#include <string.h>
#include "mylib.h"

void shell_sort (char **data, int array_size) {
    int h;
    int i,j;
    
    if ( array_size <= 1 ) {
        return;
    }
    
    for(h=1; h<array_size; h=h*3+1);
    
    for(h/=3;h>0;h/=3){
        for(i=h; i<array_size; ++i){
            for(j = i;j >= h && strcmp(data[j-h],data[j]) > 0;j -= h){
                swap_char(&data[j],&data[j-h]);
            }
        }
    }
}

int main (void) {
    char *str[]= {
        "ppppp",
        "aaaaba",
        "aaaaa",
        "asdfe",
        "ffrty",
        "ytfyy",
        "iiu87",
        "gffre",
        "cdsww",
        "zkpoi",
        "ekpoia",
    };
    
    shell_sort(str,ARRAY_NUM(str));
    printf_array_cpp("%s\n",str,ARRAY_NUM(str));
    
    return 0;
}
$ main
aaaaa
aaaaba
asdfe
cdsww
ekpoia
ffrty
gffre
iiu87
ppppp
ytfyy
zkpoi

mylib.h

うまくいってるっぽい。