C言語 クイックソートについて
クイックソートでわからない点があるため、
質問させていただきます。
-----------------------------------------------------
~省略~
data = [5, 3, 4, 2, 6, 1];
no = 6; //データの個数
~省略~
dqsort(data, 0, no-1);
~省略~
void dqsort(double data[], int lower, int upper) {
int i, boundary; //boundaryは配列の前半と後半の境界を示す
if(lower >= upper) { return; }
//基準値となる値(データの中央に位置する値)とデータの先頭の値を入れ替える
swapdata(&data[lower], &data[(lower + upper)/2]);
boundary = lower; //boundaryを先頭に移動させる
for(i=lower+1; i<=upper; i++) {
if(data[i] < data[lower]) {
//配列の前半部分に移動し、境界を移動する
swapdata(&data[++boundary], &data[i]);
}
}
//最後に基準値を境界位置にコピー
swapdata(&data[lower], &data[boundary]);
//配列の前半部分をクイックソート
dqsort(data, lower, boundary-1);
//配列の後半部分をクイックソート
dqsort(data, boundary+1, upper);
}
void swapdata(double *i, double *j) {
int temp;
temp = *i;
*i = *j;
*j = temp;
}
---------------------------------------------------------
基準値と配列の先頭のデータを入れ替えた後、
データは、[4, 3, 5, 2, 6, 1]となり、lower = 0であるため、
data[boundary]はdata[0]となります。
for文の最初のループでdata[0]<data[1]なら、
swapdata(&data[++boundary], &data[i]);
となっているのですが、
[++boundary]の部分はboundary=0に1を足してから処理するため、
swapdata(&data[1], &data[1]);
となると思うのですが、そうすると同じデータを入れ替えることになってしまいます。
何が間違っているのか、教えていただけますでしょうか。
お礼
おかげさまで無事作成することができましたσ(^^) ありがとうございます!