最高、最低、平均の場合の効率が劇的に変化するバブルソートアルゴリズムが必要な場合は、これを試してください。
int count = n - 1; // The input size
bool sFlag = true; // A flag variable allowing the inner outerloop to
break early and fall through
while (sFlag ){
sFlag = false; // Set false so that the loop can break if no swaps occur
for (int j = 0; j < count; j++){
if (A[j+1] < A[j]){
int temp; // Swap the two elements
temp = A[j];
A[j] = A[j+1];
A[j+1] = temp;
sFlag = true; // A swap has occured, iterate again
}
}
count--; //Next time, don't bother looking at the last element, it is
in order
}
これの最悪のケースは Cwost(n) = 1/2n(n+1) で、最良のケースは Cbest(n) = n-1 です。これは、カウント変数が、入力サイズに対して既に行われた反復の量に基づいて、内側のループの反復を少なくするためです。
これは、これまでに出会った中で最も効率的なバブル ソートです。