c言語でシェルソートを作っているのですが、
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern int tableindex;
extern int mycompare(int,int);
extern int myswap(int,int);
void mysort(){
int h,i,j;
int enum=tableindex;
for(h=1; h<enum/9; h=h*3+1)
;
for(; h>0; h=/3){
for(int i=h; i<enum; i++){
j=i;
while(j>=h&&mycompare(j-h,j)>0){
myswap(j-1,j);
j-=h;
}
}
}
}
というプログラムです
mycompareは隣どおしを比べ、myswapは交換するもので、別のプログラムで用意しています。enumは要素数です。
これを1093,364,121,40,13,4,1を数字順にソートしようとしたところ
1,1093,121,13,364,4,40となりおかしくなりました。
これはプログラムがおかしいのか、シェルソートの欠陥部分なのかよくわからなくて困っています
どなたか御指南よろしくお願いします
mycompareの中身は
int mycompare(int i,int j){
int r;
r=strcmp(a[i],a[j]);
return r;
}
であり、a[]はchar型です
データの定義は特にありません
自分で入力できるようにしています
回答3件
あなたの回答
tips
プレビュー