クイックソート用のスワップ機能。それは間違った出力を与えます。私は一時変数を使用すると、正しい出力が得られます。ここ はテスターです:クイックソートのスワップ機能が間違った出力を返す
void swap(int &a,int &b){
a=a+b;
b=a-b;
a=a-b;
}
とはいえ、これは正常に動作します:
void swap(int &a,int &b){
int temp=a;
a=b;
b=a;
}
私はクイックソートアルゴリズムのパーティション関数内で、この関数に配列の要素を渡しています。
「一時変数」と言うと、そのことを詳しく説明できますか?参照は一時変数にバインドできないためです。これは*未定義の動作につながります*あなたが見るような行動につながる可能性があります。 [最小限の、完全で検証可能な例](http://stackoverflow.com/help/mcve)を作成してください。そして、[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)に時間を割けてください。 –
文脈を提供してください。あなたは正しい結果を得るために何を渡しますか? –
あなたのタイプのスワップには、未定義の動作であるアンダーフローまたはオーバーフローがあります。スワップ関数が必要な場合は 'std :: swap'を使い、ライブラリの実装者は自分が何をしているかを知っていると信じてください。 – NathanOliver