- 締切済み
クイックソートのアルゴリズム
http://www1.cts.ne.jp/~clab/hsample/Sort/Sort9.html こちらにあったソースを改造しました。 #include <stdio.h> void QSort(int x[ ], int left, int right) { int i, j, temp; int pivot; i = left; j = right; pivot = x[(left + right) / 2]; // 6,5,4,3 // pivot=4 while (1) { while (x[i] <= pivot) i++; // サイトのソースは = が無かったから付けた // 2回目のループでは j=2 while (pivot < x[j]) j--; // 2回目のループで x[-1] を参照しませんか? // 初回ループで i=0, j=3 if (i >= j) break; temp = x[i]; x[i] = x[j]; x[j] = temp; // 交換 i++; j--; } ShowData(x, 10); // 途中経過を表示 if (left < i - 1) QSort(x, left, i - 1); if (j + 1 < right) QSort(x, j + 1, right); } void ShowData(int x[ ], int n) { int i; for (i = 0; i < n ; i++) printf("%d ", x[i]); printf("\n"); } void main(void) { int x[] = {6, 3, 1, 7, 0, 4, 8, 5, 2, 9}; int n = 10; printf("ソート前:\n"); ShowData(x, n); printf("ソート中:\n"); QSort(x, 0, n - 1); printf("ソート後:\n"); ShowData(x, n); } テストデータが 6,5,4,3 だと、 2回目のループで x[-1] を参照しませんか? 今コンパイラが使えません。 教えてください。 それと、=を付けたんですが、付けないといけませんよね?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
// 6,5,4,3 // pivot=4 pivot=5では? (left=0)+(rigit=3) 3/2→1 x[1]:5 >=を付けたんですが、付けないといけませんよね? つけなくて大丈夫です。 >x[-1] を参照しませんか? 多分大丈夫 >今コンパイラが使えません。 紙に、書いて1つずつシミュレートすればいいと思います。