C言語によるシェルソートの実装
サンプルプログラム
ここでは実際に、C言語によるバブルソートの実装を見てみることにします。以下のプログラムを実行してみてください。
listex5-select-1#include <stdio.h> #define MAX_LENGTH 5 #define MAX_LENGTH 8 void showData(int*,int); void main(){ int array[MAX_LENGTH] = { 41,23,55,36,14,32,59,90 }; int i, j, step, tmp; // 飛ばしていく数を設定 step = MAX_LENGTH / 2; while (step > 0) { // 途中結果の表示 showData(array,MAX_LENGTH); for(i=0; i < MAX_LENGTH; i++) { j = i; tmp = array[i]; // 順序が適切でなければ、並べ替えを行う while (j >= step && array[j - step] < tmp){ array[j] = array[j - step]; j -= step; } array[j] = tmp; } step /= 2; } // 最後にもう一度結果表示 showData(array,MAX_LENGTH); } // 配列の表示 void showData(int* array,int length){ int i; for(i = 0; i < length; i++){ printf("%d ",array[i]); } printf("\n"); }
41 23 55 36 14 32 59 90
41 32 59 90 14 23 55 36
59 90 55 36 41 32 14 23
90 59 55 41 36 32 23 14
41 32 59 90 14 23 55 36
59 90 55 36 41 32 14 23
90 59 55 41 36 32 23 14
シェルソートの特徴は、データを細かく分けて、その中でシェルソートを行う点にあります。領域は次第に統合されていきますが、すでに細かい段階である程度並べ替えが行われているので、範囲がある程度長くなっても並べ替えの手間数は単純な挿入ソートよりは少なくなっています。