C言語なら俺に聞け(入門篇) Part 13
■ このスレッドは過去ログ倉庫に格納されています
0028sage
2007/05/18(金) 03:12:47辞書順にクイックソートするアルゴリズムを作ったのですが、
並び替えた結果を見ると、ところどころ並び替えを間違えています。
原因がまったくわかりません。どのように直せばいいのでしょうか?
line[]が文字列の入っている配列です。
void Swap(int i, int j) //交換する
{a = line[i];
line[i] = line[j];
line[j] = a; }
void QSort(int left, int right)
{ int i,j,middle;
i = left; /* ソートする配列の一番小さい要素の添字 */
j = right; /* ソートする配列の一番大きい要素の添字 */
middle = (left + right) / 2; /* 基準値を配列の中央付近にとる */
while (1) {
while (strcmp(line[i],line[middle])<0) /* 基準より辞書順に後ろにある文字列が */
i++; /* 出るまで i を増加させる */
while (strcmp(line[j],line[middle])>0) /* 基準より辞書順に前にある文字列が */
j--; /* 出るまで j を減少させる */
if (i >= j) break; /* i >= j なら無限ループから抜ける */
Swap(i, j); /* line[i] と line[j]を交換 */
if ((middle -left) > 0) /* 基準値の左に 2 以上要素があれば */
QSort(left, middle-1); /* 左の配列を クイックソートする */
if ((right - middle)> 0) /* 基準値の右に 2 以上要素があれば */
QSort(middle+1, right); /* 右の配列を クイックソートする */
}
■ このスレッドは過去ログ倉庫に格納されています