文字列ポインタ配列のソート
文字列のポインタ配列をソートするにはどうしたらいいんだろうと思って実装してみた。
#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
うまくいってるっぽい。