引数( )の符号に基づいて昇順と降順を切り替える挿入ソート関数を作成しようとしましたorder
。動作しますが、スイッチとして使用した条件演算子が内側のループの各反復にいくらかのオーバーヘッドを追加するため、正しく見えません。そこで、関数のより良いバージョンを作成する方法についてアドバイスをお願いしたいと思います。
void Array::sort(int order) //Array is a struct that contains a vector of pointers named vect, as well as this function.
{
if (order==0) return;
bool ascending = (order>0);
int i,j;
Data* buffer; //Data is a struct containing some variables, including the key that has to be sorted.
for (i=1; i<_size; i++)
{
buffer = vect[i]; //A vector of pointers to Data objects declared in the Array struct.
j=i-1;
while ( j>=0 && (ascending?(vect[j]->key > buffer->key):(vect[j]->key < buffer->key)))
{
vect[j+1] = vect[j];
j--;
}
vect[++j] = buffer;
}
}